GWT RequestBuilder因SSL连接失败(在测试中)。为什么?有没有解决方法?

时间:2011-05-31 11:16:52

标签: gwt ssl junit tdd

我尝试使用带有安全连接(SSL)的GWT RequestBuilder连接到(本地)Web服务,但是没有建立连接...当我使用普通HTTP连接进行连接时,一切正常。

一些细节

  • 当我使用浏览器查看页面时,一切正常,
  • 我在本地计算机上使用自动签名的SSL证书
  • 测试失败,因为未设置实际响应代码(responseCode),
  • 如果我使用普通的HTTP连接(没有SSL),测试工作正常。

代码

package com.example.services;

import com.google.gwt.http.client.*;

import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.user.client.Timer;

public class RequestBuilderTest extends GWTTestCase {
    private static String SERVER_URL = "https://127.0.0.1/api";
    private static final int ASSERT_DELAY_IN_MS = 15000;
    private static final int TEST_DURATION_IN_MS = 20000;
    private int statusCode;

    public void testGet() throws Exception {
        new RequestBuilder(RequestBuilder.GET, SERVER_URL).sendRequest(null, new RequestCallback() {
            public void onError(Request request, Throwable e) {
                fail(e.getMessage());
            }

            public void onResponseReceived(Request request, Response response) {
                statusCode = response.getStatusCode();
            }
        });

        delayTestFinish(TEST_DURATION_IN_MS);
        new Timer() {
            @Override
            public void run() {
                assertEquals(Response.SC_OK, statusCode);
                finishTest();
            }
        }.schedule(ASSERT_DELAY_IN_MS);
    }

    @Override
    public String getModuleName() {
        return "com.example.services.RequestBuilder";
    }
}

结果

  • 测试通过SERVER_URL =“http://127.0.0.1/api”;
  • 使用SERVER_URL =“https://127.0.0.1/api”测试失败;

    这是junit的堆栈跟踪:

    junit.framework.AssertionFailedError:远程测试在127.0.0.1失败  expected = 200 actual = 0

关于什么可能出错的任何想法以及如何使测试与SSL一起工作?

修改

如何强制测试以安全模式运行?我使用eclipse ...我尝试在“运行配置”中设置一些“程序参数”(用于junit测试),但它们不起作用......以下是参数:

-noserver -startupUrl https://192.168.8.147/com.example.services.RequestBuilderTest.JUnit/ -bindAddress 0.0.0.0

如果我只是停用服务器上的SSL,会更好吗?这些测试旨在在持续集成服务器上启动,我想使用SSL测试它们。

1 个答案:

答案 0 :(得分:1)

听起来你遇到了same-origin policy问题。像这样在应用程序中嵌入URL本质上是不可靠的。相反,请使用GWT.getModuleBaseUrl()