001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026:
027: package com.sun.midp.services;
028:
029: import com.sun.midp.security.*;
030: import com.sun.midp.links.*;
031: import java.io.*;
032: import java.util.*;
033: import com.sun.cldc.isolate.*;
034: import com.sun.midp.i3test.TestCase;
035:
036: /**
037: * Tests for system service requesting functionality
038: */
039: public class TestSystemServiceConnectionListener extends TestCase {
040: public final static String SERVICE_ID = "42";
041:
042: static private class SecurityTrusted implements
043: ImplicitlyTrustedClass {
044: };
045:
046: private static SecurityToken token = SecurityInitializer
047: .requestToken(new SecurityTrusted());
048:
049: class SimpleSystemService implements SystemService, Runnable {
050: private final static String testString = "just a test string";
051:
052: Thread serviceThread = null;
053: SystemServiceConnection con = null;
054: boolean stringsMatch = false;
055:
056: public String getServiceID() {
057: return SERVICE_ID;
058: }
059:
060: public void start() {
061: }
062:
063: public void stop() {
064: try {
065: serviceThread.join();
066: } catch (InterruptedException e) {
067: }
068: }
069:
070: public void acceptConnection(SystemServiceConnection con) {
071: this .con = con;
072:
073: serviceThread = new Thread(this );
074: serviceThread.start();
075: }
076:
077: public void run() {
078: try {
079: // send test string to client
080: SystemServiceMessage msg = SystemServiceMessage
081: .newMessage();
082: msg.getDataOutput().writeUTF(testString);
083: con.send(msg);
084:
085: // get a response string from client
086: msg = con.receive();
087: String responseString = msg.getDataInput().readUTF();
088:
089: // compare strings
090: stringsMatch = testString.toUpperCase().equals(
091: responseString);
092: } catch (Throwable t) {
093: }
094: }
095: }
096:
097: void testRemote() throws IsolateStartupException,
098: InterruptedIOException, IOException, ClosedLinkException {
099:
100: SystemServiceManager manager = SystemServiceManager
101: .getInstance(token);
102: SimpleSystemService service = new SimpleSystemService();
103: manager.registerService(service);
104:
105: SystemServiceRequestHandler requestHandler = new SystemServiceRequestHandler(
106: manager);
107:
108: Isolate serviceIsolate = Isolate.currentIsolate();
109: Isolate clientIsolate = new Isolate(
110: "com.sun.midp.services.SystemServiceIsolate", null);
111: clientIsolate.start();
112:
113: IsolateSystemServiceRequestHandler isolateRequestHandler = requestHandler
114: .newIsolateRequestHandler(clientIsolate);
115:
116: Link namedPortalLink = Link.newLink(serviceIsolate,
117: clientIsolate);
118: Link[] clientLinks = { namedPortalLink };
119: LinkPortal.setLinks(clientIsolate, clientLinks);
120: NamedLinkPortal.sendLinks(namedPortalLink);
121:
122: requestHandler.handleIsolateRequests(isolateRequestHandler);
123:
124: clientIsolate.waitForExit();
125:
126: manager.shutdown();
127:
128: assertTrue("Strings match", service.stringsMatch);
129: }
130:
131: void testLocal() {
132: SystemServiceManager manager = SystemServiceManager
133: .getInstance(token);
134: SimpleSystemService service = new SimpleSystemService();
135: manager.registerService(service);
136:
137: SystemServiceRequestor serviceRequestor = SystemServiceRequestor
138: .getInstance(token);
139:
140: SystemServiceConnection con = null;
141: con = serviceRequestor
142: .requestService(TestSystemService.SERVICE_ID);
143:
144: try {
145: // receive string from service
146: SystemServiceMessage msg = con.receive();
147: String testString = msg.getDataInput().readUTF();
148:
149: // convert string to upper case and sent it back to service
150: msg = SystemServiceMessage.newMessage();
151: msg.getDataOutput().writeUTF(testString.toUpperCase());
152: con.send(msg);
153: } catch (Throwable t) {
154: System.err.println("Exception: " + t);
155: }
156:
157: manager.shutdown();
158:
159: assertTrue("Strings match", service.stringsMatch);
160: }
161:
162: /**
163: * Runs all tests.
164: */
165: public void runTests() throws InterruptedIOException,
166: IsolateStartupException, ClosedLinkException, IOException {
167:
168: declare("testRemote");
169: testRemote();
170:
171: declare("testLocal");
172: testLocal();
173: }
174: }
|