View Javadoc

1   /**
2    *
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *     http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   */
19  
20  package org.apache.hadoop.hbase.util;
21  
22  import java.security.Permission;
23  
24  /**
25    * class for masquerading System.exit(int).
26    * Use for test main method with System.exit(int )
27    * usage:
28    * new LauncherSecurityManager();
29    *    try {
30    *      CellCounter.main(args);
31    *      fail("should be exception");
32    *    } catch (SecurityException e) {
33    *      assert(.,e.getExitCode());
34    *    }
35   */
36  public class LauncherSecurityManager extends SecurityManager {
37  
38    private int exitCode;
39    private SecurityManager securityManager;
40  
41    public LauncherSecurityManager() {
42      reset();
43    }
44  
45    @Override
46    public void checkPermission(Permission perm, Object context) {
47      if (securityManager != null) {
48        // check everything with the original SecurityManager
49        securityManager.checkPermission(perm, context);
50      }
51    }
52  
53    @Override
54    public void checkPermission(Permission perm) {
55      if (securityManager != null) {
56        // check everything with the original SecurityManager
57        securityManager.checkPermission(perm);
58      }
59    }
60  
61    @Override
62    public void checkExit(int status) throws SecurityException {
63      exitCode = status;
64      throw new SecurityException("Intercepted System.exit(" + status + ")");
65    }
66  
67    public  int getExitCode() {
68      return exitCode;
69    }
70  
71    public void reset() {
72      exitCode = 0;
73    }
74  
75  }