function runTest(config)
{
    // This test passes |response| to update() as a JSON Web Key Set.
    // CDMs other than Clear Key won't expect |response| in this format.
    promise_test(function(test) {
        var initDataType;
        var initData;
        var keySystem = config.keysystem;
        var mediaKeySession;

        function createReallyLongJWKSet()
        {
            // This is just a standard JWKSet with a lot of
            // extra items added to the end. Key ID and key
            // doesn't really matter.
            var jwkSet = '{"keys":[{'
                       +     '"kty":"oct",'
                       +     '"k":"MDEyMzQ1Njc4OTAxMjM0NQ",'
                       +     '"kid":"MDEyMzQ1Njc4OTAxMjM0NQ"'
                       + '}]';
            return jwkSet + ',"test":"unknown"'.repeat(4000) + '}';
        }

        return navigator.requestMediaKeySystemAccess(keySystem, getSimpleConfiguration()).then(function(access) {
            initDataType = access.getConfiguration().initDataTypes[0];
            initData = getInitData(initDataType);
            return access.createMediaKeys();
        }).then(function(mediaKeys) {
            mediaKeySession = mediaKeys.createSession();
            var eventWatcher = new EventWatcher(test, mediaKeySession, ['message']);
            var promise = eventWatcher.wait_for('message');
            mediaKeySession.generateRequest(initDataType, initData);
            return promise;
        }).then(function () {
            var jwkSet = createReallyLongJWKSet();
            assert_greater_than(jwkSet.length, 65536);
            var jwkSetArray = stringToUint8Array(jwkSet);
            return mediaKeySession.update(jwkSetArray);
        }).then(function () {
            assert_unreached('update() with a response longer than 64Kb succeed');
        }).catch(function (error) {
            assert_equals(error.name, 'TypeError');
        });
    }, 'update() with invalid response (longer than 64Kb characters) should fail.');
}
