001package edu.pdx.cs.joy.rmi; 002 003import edu.pdx.cs.joy.InvokeMainTestCase; 004import org.junit.jupiter.api.AfterAll; 005import org.junit.jupiter.api.BeforeAll; 006 007import java.net.MalformedURLException; 008import java.rmi.AlreadyBoundException; 009import java.rmi.NotBoundException; 010import java.rmi.RemoteException; 011import java.rmi.registry.LocateRegistry; 012import java.rmi.registry.Registry; 013import java.rmi.server.UnicastRemoteObject; 014 015public class MovieDatabaseRmiTestCase extends InvokeMainTestCase { 016 static int rmiPort; 017 018 private static int getRandomPort() { 019 return (int) (1_025 + Math.random() * (9_000 - 1)); 020 } 021 022 static final String RMI_HOST = "localhost"; 023 private static MovieDatabaseImpl movieDatabaseImpl; 024 private static Registry rmiRegistry; 025 026 @BeforeAll 027 public static void bindMovieDatabaseIntoRmiRegistry() throws RemoteException, AlreadyBoundException, MalformedURLException { 028 movieDatabaseImpl = new MovieDatabaseImpl(); 029 rmiPort = getRandomPort(); 030 MovieDatabase database = (MovieDatabase) UnicastRemoteObject.exportObject(movieDatabaseImpl, rmiPort); 031 rmiRegistry = LocateRegistry.createRegistry(rmiPort); 032 rmiRegistry.bind(MovieDatabase.RMI_OBJECT_NAME, database); 033 } 034 035 @AfterAll 036 public static void unbindMovieDatabaseFromRmiRegistry() throws RemoteException, NotBoundException { 037 Registry registry = rmiRegistry; 038 UnicastRemoteObject.unexportObject(movieDatabaseImpl, true); 039 registry.unbind(MovieDatabase.RMI_OBJECT_NAME); 040 UnicastRemoteObject.unexportObject(rmiRegistry, true); 041 movieDatabaseImpl = null; 042 } 043 044 private static Registry getRmiRegistry() throws RemoteException { 045 return LocateRegistry.getRegistry(RMI_HOST, rmiPort); 046 } 047 048 static MovieDatabase getMovieDatabase() throws RemoteException, NotBoundException { 049 return (MovieDatabase) getRmiRegistry().lookup(MovieDatabase.RMI_OBJECT_NAME); 050 } 051}