1/* 2 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package jdk.nashorn.internal.runtime.test; 27 28import static org.testng.Assert.assertEquals; 29import static org.testng.Assert.fail; 30import java.io.ByteArrayOutputStream; 31import java.io.IOException; 32import java.io.NotSerializableException; 33import java.io.ObjectOutputStream; 34import javax.script.ScriptEngine; 35import javax.script.ScriptException; 36import jdk.nashorn.api.scripting.NashornScriptEngineFactory; 37import jdk.nashorn.internal.runtime.RewriteException; 38import jdk.nashorn.internal.runtime.UnwarrantedOptimismException; 39import org.testng.annotations.Test; 40 41/** 42 * JDK-8044518: Ensure exceptions related to optimistic recompilation are not serializable 43 * 44 * @test 45 * @modules jdk.scripting.nashorn/jdk.nashorn.internal.runtime 46 * @run testng jdk.nashorn.internal.runtime.test.ExceptionsNotSerializable 47 */ 48@SuppressWarnings("javadoc") 49public class ExceptionsNotSerializable { 50 @Test 51 public void rewriteExceptionNotSerializable() throws ScriptException { 52 // NOTE: we must create a RewriteException in a context of a Nashorn engine, as it uses Global.newIntance() 53 // internally. 54 final ScriptEngine e = new NashornScriptEngineFactory().getScriptEngine(); 55 e.put("f", new Runnable() { 56 @Override 57 public void run() { 58 tryToSerialize(RewriteException.create(null, new Object[0], new String[0])); 59 } 60 }); 61 e.eval("f()"); 62 } 63 64 @Test 65 public void unwarrantedOptimismExceptionNotSerializable() { 66 tryToSerialize(new UnwarrantedOptimismException(1.0, 128)); 67 } 68 69 private static void tryToSerialize(final Object obj) { 70 try { 71 new ObjectOutputStream(new ByteArrayOutputStream()).writeObject(obj); 72 fail(); 73 } catch (final NotSerializableException e) { 74 assertEquals(e.getMessage(), obj.getClass().getName()); 75 } catch (final IOException e) { 76 fail("", e); 77 } 78 79 } 80} 81