//
//   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.
//

// Policy file with minimal set of permissions to run unit test for
// AssertFailureTest with ThreadDump permissions.


// The test harness sets up four variables used by this policy file
//
// derbyTesting.codejar - URL to the jar files when they are in the classpath
// derbyTesting.codeclasses - URL to the classes directory when it is in the classpath
//
// Only one of derbyTesting.codejar and derbyTesting.codeclasses will be valid, the
// other will be set to a bogus URL like file://unused
//
// derbyTesting.codedir - File location of either derbyTesting.codejar or derbyTesting.codeclasses.
// Only required due to a BUG (see below for more info).
//
// derbyTesting.jaxpjar - URL to the jar file containing the JAXP implementation
//     for XML-based tests (ex. lang/XMLBindingTest.java).
//
// derbyTesting.serverhost - Host name or ip where network server is started 
// derbyTesting.clienthost - specifies the clients ip address/hostName. 
//     when testing with networkserver on a remote host, this needs to be passed in 
//     with the NetworkServerControl start command


//
// Permissions for the tests (derbyTesting.jar)
//
grant codeBase "${derbyTesting.testjar}derbyTesting.jar" {
  // Allow tests to install and uninstall the security manager and
  // to refresh the policy
  permission java.util.PropertyPermission "java.security.policy", "read,write";
  permission java.lang.RuntimePermission "setSecurityManager";
  permission java.security.SecurityPermission "getPolicy";
  
  // derbyTesting.junit.TestConfiguration... modifies System properties
  permission java.util.PropertyPermission "*", "read,write";

  //needs to run "doAsPrivileged"
  permission javax.security.auth.AuthPermission "doAsPrivileged";
  
};


//
// Permissions for running the test on the class files
//
grant codeBase "${derbyTesting.codeclasses}" {
  // Allow tests to install and uninstall the security manager and
  // to refresh the policy
  permission java.util.PropertyPermission "java.security.policy", "read,write";
  permission java.lang.RuntimePermission "setSecurityManager";
  permission java.security.SecurityPermission "getPolicy";

  // derbyTesting.junit.TestConfiguration... modifies System properties
  permission java.util.PropertyPermission "*", "read,write";

};

grant codeBase "${derbyTesting.junit}" {
    // This permission is needed when running the tests using ant 1.7
    permission java.io.FilePermission "${user.dir}${/}*", "write";
};

// Ant's junit runner requires setOut to redirect the System output streams
// to the forked JVM used when running junit tests inside Ant. Ant requires
// forking the JVM if you want to run tests in a different directory than the
// current one.
grant codeBase "${derbyTesting.antjunit}" {
    permission java.lang.RuntimePermission "setIO";
    
    // This permission is needed when running the tests using ant 1.7
    permission java.io.FilePermission "${user.dir}${/}*", "write";
};
