Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.apache.solr.cloud;
  
  /*
   * 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.
  */
 
 
 import java.util.Set;
 
To use, tests must be able to run iptables, eg sudo chmod u+s iptables
 
 public class IpTables {
   static final Logger log = LoggerFactory
       .getLogger(IpTables.class);
   
   private static boolean ENABLED = Boolean.getBoolean("solr.tests.use.iptables");
   static class ThreadPumper {
 
     public ThreadPumper() {}
     
     public static Thread start(final InputStream fromfinal OutputStream tofinal boolean verbose) {
       Thread t = new Thread() {
         @Override
         public void run() {
           try {
             byte [] buffer = new byte [1024];
             int len;
             while ((len = from.read(buffer)) != -1) {
               if (verbose) {
                 to.write(buffer, 0, len);
               }
             }
           } catch (IOException e) {
             ..println("Couldn't pipe from the forked process: " + e.toString());
           }
         }
       };
       t.start();
       return t;
     }
   }
   
   private static Set<IntegerBLOCK_PORTS = Collections.synchronizedSet(new HashSet<Integer>());
   
   public static void blockPort(int portthrows IOException,
       InterruptedException {
     if () {
       .info("Block port with iptables: " + port);
       .add(port);
       runCmd(("iptables -A INPUT -p tcp --dport " + port + " -j DROP")
           .split("\\s"));
       runCmd(("iptables -A OUTPUT -p tcp --dport " + port + " -j DROP")
           .split("\\s"));
     }
   }
   
   public static void unblockPort(int portthrows IOException,
       InterruptedException {
     if () {
       .info("Unblock port with iptables: " + port);
       runCmd(("iptables -D INPUT -p tcp --dport " + port + " -j DROP")
           .split("\\s"));
       runCmd(("iptables -D OUTPUT -p tcp --dport " + port + " -j DROP")
           .split("\\s"));
     }
   }
   
   public static void unblockAllPorts() throws IOExceptionInterruptedException {
     if () {
       .info("Unblocking any ports previously blocked with iptables...");
       for (Integer port : ) {
         IpTables.unblockPort(port);
       }
     }
   }
   
  private static void runCmd(String[] cmdthrows IOExceptionInterruptedException {
    ProcessBuilder pb = new ProcessBuilder(cmd);
    pb.redirectErrorStream(true);
    Process p = pb.start();
    // We pump everything to stderr.
    PrintStream childOut = .
    Thread stdoutPumper = ThreadPumper.start(p.getInputStream(), childOuttrue);
    Thread stderrPumper = ThreadPumper.start(p.getErrorStream(), childOuttrue);
    if (truechildOut.println(">>> Begin subprocess output");
    p.waitFor();
    stdoutPumper.join();
    stderrPumper.join();
    if (truechildOut.println("<<< End subprocess output");
  }
New to GrepCode? Check out our FAQ X