From 08cac50eedf85e4d650f7dcf898dbed5707e20a5 Mon Sep 17 00:00:00 2001
From: Nev Wylie <54870357+MSNev@users.noreply.github.com>
Date: Wed, 27 Jan 2021 17:08:46 -0800
Subject: [PATCH] fix(test): ci environment doesn't handle replacing console
 with a mock

---
 .../test/diag/consoleLogger.test.ts           | 140 ++++++++++--------
 1 file changed, 80 insertions(+), 60 deletions(-)

diff --git a/packages/opentelemetry-api/test/diag/consoleLogger.test.ts b/packages/opentelemetry-api/test/diag/consoleLogger.test.ts
index d3ba79de55e..ee0a984d756 100644
--- a/packages/opentelemetry-api/test/diag/consoleLogger.test.ts
+++ b/packages/opentelemetry-api/test/diag/consoleLogger.test.ts
@@ -32,6 +32,16 @@ describe('DiagConsoleLogger', () => {
   let errorCalledArgs: unknown;
   let logCalledArgs: unknown;
 
+  let canMockConsole = true;
+
+  try {
+    // eslint-disable-next-line no-global-assign
+    console = origConsole;
+  } catch (ex) {
+    // Not supported on CI pipeline (works locally)
+    canMockConsole = false;
+  }
+
   beforeEach(() => {
     // mock
     console.debug = (...args: unknown[]) => {
@@ -62,8 +72,16 @@ describe('DiagConsoleLogger', () => {
     errorCalledArgs = null;
     logCalledArgs = null;
     traceCalledArgs = null;
-    // eslint-disable-next-line no-global-assign
-    console = origConsole;
+
+    if (canMockConsole) {
+      try {
+        // eslint-disable-next-line no-global-assign
+        console = origConsole;
+      } catch (ex) {
+        // Not supported on CI pipeline
+        canMockConsole = false;
+      }
+    }
     console.debug = origDebug;
     console.info = origInfo;
     console.warn = origWarn;
@@ -265,66 +283,68 @@ describe('DiagConsoleLogger', () => {
       assert.deepStrictEqual(infoCalledArgs, null);
     });
 
-    it('should not throw even when console is invalid after construction', () => {
-      const invalidConsole = {
-        debug: 1,
-        warn: 2,
-        error: 3,
-        trace: 4,
-        info: 5,
-        log: 6,
-      };
+    if (canMockConsole) {
+      it('should not throw even when console is invalid after construction', () => {
+        const invalidConsole = {
+          debug: 1,
+          warn: 2,
+          error: 3,
+          trace: 4,
+          info: 5,
+          log: 6,
+        };
 
-      const consoleLogger = new DiagConsoleLogger();
-      (console as any) = invalidConsole;
-      consoleLogger.terminal('terminal called %s', 'param1');
-      assert.deepStrictEqual(errorCalledArgs, null);
-      consoleLogger.critical('critical called %s', 'param1');
-      assert.deepStrictEqual(errorCalledArgs, null);
-      consoleLogger.error('error called %s', 'param1');
-      assert.deepStrictEqual(errorCalledArgs, null);
-      consoleLogger.warn('warn called %s', 'param1');
-      assert.deepStrictEqual(warnCalledArgs, null);
-      consoleLogger.info('info called %s', 'param1');
-      assert.deepStrictEqual(infoCalledArgs, null);
-      consoleLogger.debug('debug called %s', 'param1');
-      assert.deepStrictEqual(debugCalledArgs, null);
-      consoleLogger.trace('trace called %s', 'param1');
-      assert.deepStrictEqual(traceCalledArgs, null);
-      assert.deepStrictEqual(logCalledArgs, null);
-      consoleLogger.forcedInfo('forcedInfo called %s', 'param1');
-      assert.deepStrictEqual(infoCalledArgs, null);
-    });
+        const consoleLogger = new DiagConsoleLogger();
+        (console as any) = invalidConsole;
+        consoleLogger.terminal('terminal called %s', 'param1');
+        assert.deepStrictEqual(errorCalledArgs, null);
+        consoleLogger.critical('critical called %s', 'param1');
+        assert.deepStrictEqual(errorCalledArgs, null);
+        consoleLogger.error('error called %s', 'param1');
+        assert.deepStrictEqual(errorCalledArgs, null);
+        consoleLogger.warn('warn called %s', 'param1');
+        assert.deepStrictEqual(warnCalledArgs, null);
+        consoleLogger.info('info called %s', 'param1');
+        assert.deepStrictEqual(infoCalledArgs, null);
+        consoleLogger.debug('debug called %s', 'param1');
+        assert.deepStrictEqual(debugCalledArgs, null);
+        consoleLogger.trace('trace called %s', 'param1');
+        assert.deepStrictEqual(traceCalledArgs, null);
+        assert.deepStrictEqual(logCalledArgs, null);
+        consoleLogger.forcedInfo('forcedInfo called %s', 'param1');
+        assert.deepStrictEqual(infoCalledArgs, null);
+      });
 
-    it('should not throw even when console is invalid before construction', () => {
-      const invalidConsole = {
-        debug: 1,
-        warn: 2,
-        error: 3,
-        trace: 4,
-        info: 5,
-        log: 6,
-      };
+      it('should not throw even when console is invalid before construction', () => {
+        const invalidConsole = {
+          debug: 1,
+          warn: 2,
+          error: 3,
+          trace: 4,
+          info: 5,
+          log: 6,
+        };
 
-      (console as any) = invalidConsole;
-      const consoleLogger = new DiagConsoleLogger();
-      consoleLogger.terminal('terminal called %s', 'param1');
-      assert.deepStrictEqual(errorCalledArgs, null);
-      consoleLogger.critical('critical called %s', 'param1');
-      assert.deepStrictEqual(errorCalledArgs, null);
-      consoleLogger.error('error called %s', 'param1');
-      assert.deepStrictEqual(errorCalledArgs, null);
-      consoleLogger.warn('warn called %s', 'param1');
-      assert.deepStrictEqual(warnCalledArgs, null);
-      consoleLogger.info('info called %s', 'param1');
-      assert.deepStrictEqual(infoCalledArgs, null);
-      consoleLogger.debug('debug called %s', 'param1');
-      assert.deepStrictEqual(debugCalledArgs, null);
-      consoleLogger.trace('trace called %s', 'param1');
-      assert.deepStrictEqual(traceCalledArgs, null);
-      assert.deepStrictEqual(logCalledArgs, null);
-      consoleLogger.forcedInfo('forcedInfo called %s', 'param1');
-      assert.deepStrictEqual(infoCalledArgs, null);
-    });
+        (console as any) = invalidConsole;
+        const consoleLogger = new DiagConsoleLogger();
+        consoleLogger.terminal('terminal called %s', 'param1');
+        assert.deepStrictEqual(errorCalledArgs, null);
+        consoleLogger.critical('critical called %s', 'param1');
+        assert.deepStrictEqual(errorCalledArgs, null);
+        consoleLogger.error('error called %s', 'param1');
+        assert.deepStrictEqual(errorCalledArgs, null);
+        consoleLogger.warn('warn called %s', 'param1');
+        assert.deepStrictEqual(warnCalledArgs, null);
+        consoleLogger.info('info called %s', 'param1');
+        assert.deepStrictEqual(infoCalledArgs, null);
+        consoleLogger.debug('debug called %s', 'param1');
+        assert.deepStrictEqual(debugCalledArgs, null);
+        consoleLogger.trace('trace called %s', 'param1');
+        assert.deepStrictEqual(traceCalledArgs, null);
+        assert.deepStrictEqual(logCalledArgs, null);
+        consoleLogger.forcedInfo('forcedInfo called %s', 'param1');
+        assert.deepStrictEqual(infoCalledArgs, null);
+      });
+    }
   });
 });