From 2ef117740653ed05dcaaeaa9a87099e30bc97c26 Mon Sep 17 00:00:00 2001 From: Albert Daurell Date: Tue, 10 May 2022 01:19:55 +0200 Subject: [PATCH] test: Trigger RESTRICTIONS_CANNOT_BE_MET once from onKeyStatus error (#4205) Adding tests for https://github.com/shaka-project/shaka-player/pull/4194 in order to ensure that, when `onKeyStatus({ kid: 'output-restricted'})` error is thrown **ONLY** one `RESTRICTIONS_CANNOT_BE_MET` error is triggered/thrown. --- test/player_unit.js | 46 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/test/player_unit.js b/test/player_unit.js index 05b87787c9..19eaf5d946 100644 --- a/test/player_unit.js +++ b/test/player_unit.js @@ -154,6 +154,7 @@ describe('Player', () => { window.MediaSource.isTypeSupported = originalIsTypeSupported; shaka.media.ManifestParser.unregisterParserByMime(fakeMimeType); navigator.mediaCapabilities.decodingInfo = originalDecodingInfo; + onError.calls.reset(); } }); @@ -2632,6 +2633,51 @@ describe('Player', () => { expect(activeVariant.id).toBe(1); }); + // Regression test for https://github.com/shaka-project/shaka-player/issues/4190 + it('throws only one RESTRICTIONS_CANNOT_BE_MET error', async () => { + manifest = shaka.test.ManifestGenerator.generate((manifest) => { + manifest.addVariant(0, (variant) => { + variant.addVideo(1, (stream) => { + stream.keyIds = new Set(['abc']); + }); + }); + }); + + // Check that error is RESTRICTIONS_CANNOT_BE_MET + onError.and.callFake((e) => { + const error = e.detail; + shaka.test.Util.expectToEqualError( + error, + new shaka.util.Error( + shaka.util.Error.Severity.CRITICAL, + shaka.util.Error.Category.MANIFEST, + shaka.util.Error.Code.RESTRICTIONS_CANNOT_BE_MET, { + hasAppRestrictions: false, + missingKeys: ['abc'], + restrictedKeyStatuses: [], + })); + }); + + await player.load(fakeManifestUri, 0, fakeMimeType); + const activeVariant = getActiveVariantTrack(); + expect(activeVariant.id).toBe(0); + + abrManager.chooseIndex = 0; + abrManager.chooseVariant.calls.reset(); + + onKeyStatus({'abc': 'output-restricted'}); + + // Ensure that RESTRICTIONS_CANNOT_BE_MET is thrown once + expect(onError).toHaveBeenCalledTimes(1); + + // It does not call chooseVariant + expect(abrManager.chooseVariant).not.toHaveBeenCalled(); + + // The first variant is disallowed. + expect(manifest.variants[0].id).toBe(0); + expect(manifest.variants[0].allowedByKeySystem).toBe(false); + }); + it('doesn\'t switch if the active stream isn\'t restricted', async () => { manifest = shaka.test.ManifestGenerator.generate((manifest) => { manifest.addVariant(0, (variant) => {