java - 无法启动嵌入式 Google App Engine 服务器进行集成测试

标签 java google-app-engine maven integration-testing

我正在尝试在由 maven 故障安全插件运行的测试套件的 @BeforeClass 中启动嵌入式 Google App Engine 开发服务器 (sdk 1.7.3)。应该启动它的代码如下所示:

private static final String HOST = "0.0.0.0";
private static final int PORT = 8887;
private static DevAppServer devAppServer;


@BeforeClass
public static void setup() throws Exception {
    log.debug("Starting development server");
    File appRootDir = new File("target/visualize-1.0.war");
    DevAppServerFactory devAppServerFactory = new DevAppServerFactory();
    devAppServer = devAppServerFactory.createDevAppServer(appRootDir, HOST, PORT); 
    devAppServer.start();
}

但是在调用 createDevAppServer 期间,我遇到了一个安全异常:

java.security.AccessControlException: access denied (java.lang.RuntimePermission setContextClassLoader)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.Thread.setContextClassLoader(Thread.java:1394)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:366)
at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021)

使用 -Djava.security.debug=access,failure 调试安全异常我看到了:

  access: access allowed (java.io.FilePermission    /home/me/.m2/repository/com/google/appengine/appengine-tools-sdk/1.7.3/appengine-tools-sdk-1.7.3.jar read)
 access: access denied (java.security.SecurityPermission getPolicy)
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1249)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:364)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.security.Policy.getPolicy(Policy.java:133)
at com.google.apphosting.utils.security.SecurityManagerInstaller.install(SecurityManagerInstaller.java:81)
at com.google.appengine.tools.development.DevAppServerFactory.createDevAppServer(DevAppServerFactory.java:152)
at com.google.appengine.tools.development.DevAppServerFactory.createDevAppServer(DevAppServerFactory.java:69)
at com.google.appengine.tools.development.DevAppServerFactory.createDevAppServer(DevAppServerFactory.java:53)

我做错了什么?

最佳答案

实际上,您不应该像以前那样调用 GAE(提示:GAE 有很多补丁来处理安全问题,这根本不值得)

但是,maven-gae-plugin 确实有 gae:start 和 gae:stop 是专门为 IT 设计的。

这就是我将它用于 IT 的方式:

<plugin>
    <groupId>net.kindleit</groupId>
    <artifactId>maven-gae-plugin</artifactId>
    <version>0.9.4</version>
    <dependencies>
        <dependency>
            <groupId>net.kindleit</groupId>
            <artifactId>gae-runtime</artifactId>
            <version>1.6.6</version>
            <type>pom</type>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <id>start-integration-test</id>
            <phase>pre-integration-test</phase>
            <goals>
                <goal>start</goal>
            </goals>
        </execution>
        <execution>
            <id>stop-integration-test</id>
            <phase>post-integration-test</phase>
            <goals>
                <goal>stop</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.12</version>
    <executions>
        <execution>
            <id>it</id>
            <phase>integration-test</phase>
            <goals>
                <goal>integration-test</goal>
            </goals>
        </execution>
    </executions>
</plugin>

关于java - 无法启动嵌入式 Google App Engine 服务器进行集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13340303/

相关文章:

java - 更新 JavaFX 阶段的大小和位置不起作用

java - 示例应用程序中出现 com.google.appengine.api.datastore.DatastoreNeedIndexException 错误

Eclipse + JBoss - 一些 JAR 文件未部署

python - GAE/P存储SES连接和线程安全

mysql - Google Cloud SQL 连接/权限失败

java - Spark : java. lang.NoSuchMethodError : com. google.common.collect.Ordering.leastOf(Ljava/util/Iterator;I)Ljava/util/List

linux - 如何使用 dropbox 为 Windows 和 Linux 设置通用的 Maven 存储库?

java - 为大文件构建动态查询

java - 在 JPanel 上使用 ImageIcon() 没有显示图像

java - JFrame/JPanel 不更新重绘或重新验证