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      this(null);
43    }
44  
45    public LauncherSecurityManager(SecurityManager securityManager) {
46      this.securityManager = securityManager;
47      reset();
48    }
49  
50    @Override
51    public void checkPermission(Permission perm, Object context) {
52      if (securityManager != null) {
53        // check everything with the original SecurityManager
54        securityManager.checkPermission(perm, context);
55      }
56    }
57  
58    @Override
59    public void checkPermission(Permission perm) {
60      if (securityManager != null) {
61        // check everything with the original SecurityManager
62        securityManager.checkPermission(perm);
63      }
64    }
65  
66    @Override
67    public void checkExit(int status) throws SecurityException {
68      exitCode = status;
69      throw new SecurityException("Intercepted System.exit(" + status + ")");
70    }
71  
72    public  int getExitCode() {
73      return exitCode;
74    }
75  
76    public void reset() {
77      exitCode = 0;
78    }
79  
80  }