void solve() { Thread tcThread = new Thread(tc); // System.out.println("starting client thread"); tcThread.start(); try { tcThread.join(); } catch (Exception e) { e.printStackTrace(); } // System.out.println("joined client thread"); result = SudokuSolver.solve(tc.testcase); success = SudokuSolver.isLegalSolution(result, tc.testcase); }
public static void main(String[] args) throws Exception { // Can be necessary to run in parallel to other clouds, so find open ports int[] ports = new int[3]; int port = 54321; for( int i = 0; i < ports.length; i++ ) { for( ;; ) { if( isOpen(port) && isOpen(port + 1) ) { ports[i] = port; port += 2; break; } port++; } } String flat = ""; for( int i = 0; i < ports.length; i++ ) flat += "127.0.0.1:" + ports[i] + "\n"; // Force all IPs to local so that users can run with a firewall String[] a = new String[] { "-ip", "127.0.0.1", "-flatfile", Utils.writeFile(flat).getAbsolutePath() }; H2O.OPT_ARGS.ip = "127.0.0.1"; args = (String[]) ArrayUtils.addAll(a, args); ArrayList<Node> nodes = new ArrayList<Node>(); for( int i = 1; i < ports.length; i++ ) nodes.add(new NodeVM(Utils.append(args, "-port", "" + ports[i]))); args = Utils.append(new String[] { "-mainClass", Master.class.getName() }, args); Node master = new NodeVM(Utils.append(args, "-port", "" + ports[0])); nodes.add(master); File out = null, err = null, sandbox = new File("sandbox"); sandbox.mkdirs(); Utils.clearFolder(sandbox); for( int i = 0; i < nodes.size(); i++ ) { out = File.createTempFile("junit-" + i + "-out-", null, sandbox); err = File.createTempFile("junit-" + i + "-err-", null, sandbox); nodes.get(i).persistIO(out.getAbsolutePath(), err.getAbsolutePath()); nodes.get(i).start(); } int exit = master.waitFor(); if( exit != 0 ) { Log.log(out, System.out); Thread.sleep(100); // Or mixed (?) Log.log(err, System.err); } for( Node node : nodes ) node.kill(); if( exit == 0 ) System.out.println("OK"); System.exit(exit); }
/** Calculates a MD5 digest of the class. */ public String getDigest() { try { if (_className == null || "".equals(_className)) return ""; DynamicClassLoader loader = (DynamicClassLoader) Thread.currentThread().getContextClassLoader(); ClassLoader tmpLoader = loader.getNewTempClassLoader(); Class cl = Class.forName(_className, false, tmpLoader); if (cl == null) return ""; MessageDigest digest = MessageDigest.getInstance("MD5"); addDigest(digest, cl.getName()); addDigest(digest, cl.getModifiers()); Class superClass = cl.getSuperclass(); if (superClass != null) addDigest(digest, superClass.getName()); Class[] interfaces = cl.getInterfaces(); for (int i = 0; i < interfaces.length; i++) addDigest(digest, interfaces[i].getName()); Field[] fields = cl.getDeclaredFields(); Arrays.sort(fields, new FieldComparator()); if (_checkFields) { for (Field field : fields) { if (Modifier.isPrivate(field.getModifiers()) && !_checkPrivate) continue; if (Modifier.isProtected(field.getModifiers()) && !_checkProtected) continue; addDigest(digest, field.getName()); addDigest(digest, field.getModifiers()); addDigest(digest, field.getType().getName()); addDigest(digest, field.getAnnotations()); } } Method[] methods = cl.getDeclaredMethods(); Arrays.sort(methods, new MethodComparator()); for (int i = 0; i < methods.length; i++) { Method method = methods[i]; if (Modifier.isPrivate(method.getModifiers()) && !_checkPrivate) continue; if (Modifier.isProtected(method.getModifiers()) && !_checkProtected) continue; if (Modifier.isStatic(method.getModifiers()) && !_checkStatic) continue; addDigest(digest, method.getName()); addDigest(digest, method.getModifiers()); addDigest(digest, method.getName()); Class[] param = method.getParameterTypes(); for (int j = 0; j < param.length; j++) addDigest(digest, param[j].getName()); addDigest(digest, method.getReturnType().getName()); Class[] exn = method.getExceptionTypes(); for (int j = 0; j < exn.length; j++) addDigest(digest, exn[j].getName()); addDigest(digest, method.getAnnotations()); } byte[] digestBytes = new byte[256]; int len = digest.digest(digestBytes, 0, digestBytes.length); return digestToBase64(digestBytes, len); } catch (Exception e) { log.log(Level.FINER, e.toString(), e); return ""; } }