| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package libcore.java.net; |
| |
| import junit.framework.TestCase; |
| |
| public abstract class OldSocketTestCase extends TestCase { |
| |
| public static final int SO_MULTICAST = 0; |
| |
| public static final int SO_MULTICAST_INTERFACE = 1; |
| |
| public static final int SO_LINGER = 2; |
| |
| public static final int SO_RCVBUF = 3; |
| |
| public static final int SO_TIMEOUT = 4; |
| |
| public static final int SO_SNDBUF = 5; |
| |
| public static final int TCP_NODELAY = 6; |
| |
| public static final int SO_KEEPALIVE = 7; |
| |
| public static final int SO_REUSEADDR = 8; |
| |
| public static final int SO_OOBINLINE = 9; |
| |
| public static final int IP_TOS = 10; |
| |
| public static final int SO_BROADCAST = 11; |
| |
| public static final int SO_USELOOPBACK = 12; |
| |
| private static final String osDoesNotSupportOperationString = "The socket does not support the operation"; |
| |
| private static final String osDoesNotSupportOptionString = "The socket option is not supported"; |
| |
| private static final String osDoesNotSupportOptionArgumentString = "The socket option arguments are invalid"; |
| |
| /** |
| * Answer whether the OS supports the given socket option. |
| */ |
| public boolean getOptionIsSupported(int option) { |
| switch (option) { |
| case SO_RCVBUF: |
| case SO_SNDBUF: |
| return true; |
| case SO_MULTICAST: |
| case SO_MULTICAST_INTERFACE: |
| case SO_LINGER: |
| return true; |
| case TCP_NODELAY: |
| case SO_TIMEOUT: |
| return true; |
| case SO_KEEPALIVE: |
| case SO_REUSEADDR: |
| return true; |
| case SO_OOBINLINE: |
| return true; |
| case IP_TOS: |
| return true; |
| case SO_BROADCAST: |
| return true; |
| case SO_USELOOPBACK: |
| return true; |
| } |
| return false; |
| } |
| |
| /** |
| * If the exception is "socket does not support the operation" exception and |
| * it is expected on the current platform, do nothing. Otherwise, fail the |
| * test. |
| */ |
| public void handleException(Exception e, int option) { |
| if (!getOptionIsSupported(option)) { |
| String message = e.getMessage(); |
| if (message != null |
| && (message.equals(osDoesNotSupportOperationString) |
| || message.equals(osDoesNotSupportOptionString) || message |
| .equals(osDoesNotSupportOptionArgumentString))) { |
| /* |
| * This exception is the correct behavior for platforms which do |
| * not support the option |
| */ |
| } else { |
| fail("Threw \"" |
| + e |
| + "\" instead of correct exception for unsupported socket option: " |
| + getSocketOptionString(option)); |
| } |
| } else { |
| fail("Exception during test : " + e.getMessage()); |
| } |
| } |
| |
| /** |
| * This method should be called at the end of a socket option test's code |
| * but before the exception catch statements. It throws a failure if the |
| * option given is not supported on the current platform but the VM failed |
| * to throw an exception. So, on platforms which do not support the option, |
| * the execution should never get to this method. |
| */ |
| public void ensureExceptionThrownIfOptionIsUnsupportedOnOS(int option) { |
| if (!getOptionIsSupported(option)) { |
| fail("Failed to throw exception for unsupported socket option: " |
| + getSocketOptionString(option)); |
| } |
| } |
| |
| /** |
| * Answer a string for the socket option given. |
| */ |
| private String getSocketOptionString(int option) { |
| switch (option) { |
| case SO_MULTICAST: |
| return "Multicast"; |
| case SO_LINGER: |
| return "Linger"; |
| case SO_RCVBUF: |
| return "Receive buffer size"; |
| case SO_TIMEOUT: |
| return "Socket timeout"; |
| case SO_SNDBUF: |
| return "Send buffer size"; |
| case TCP_NODELAY: |
| return "TCP no delay"; |
| case SO_KEEPALIVE: |
| return "Keepalive"; |
| case SO_REUSEADDR: |
| return "Reuse address"; |
| case SO_OOBINLINE: |
| return "out of band data inline"; |
| case IP_TOS: |
| return "Traffic class"; |
| case SO_BROADCAST: |
| return "broadcast"; |
| case SO_USELOOPBACK: |
| return "loopback"; |
| } |
| return "Unknown socket option"; |
| } |
| |
| } |