<html>
<link rel="import" href="../resources/chai.html" />
<link rel="import" href="../resources/mocha.html" />
<link rel="import" href="/mojo/public/html/core.html" as="core" />
<link rel="import" href="/mojo/public/html/connection.html" as="connection" />
<link rel="import" href="/mojo/services/public/interfaces/network/network_service.mojom.html" as="net" />
<link rel="import" href="/mojo/services/public/interfaces/network/url_loader.mojom.html" as="loader" />
<script>
describe('Mojo network_service', function() {
  this.enableTimeouts(false);

  it('should be able to fetch text files', function(done) {
    var netServiceHandle = internals.connectToService(
        "mojo://network_service//", "mojo::NetworkService");
    var netConnection = new connection.Connection(
        netServiceHandle,
        net.NetworkService.stubClass,
        net.NetworkService.proxyClass);
    var urlLoaderPipe = new core.createMessagePipe();
    netConnection.remote.createURLLoader(urlLoaderPipe.handle1);
    var urlLoaderConnection = new connection.Connection(
        urlLoaderPipe.handle0,
        loader.URLLoader.stubClass,
        loader.URLLoader.proxyClass);
    var urlRequest = new loader.URLRequest();
    urlRequest.url = "http://127.0.0.1:8000/services/resources/pass.txt";
    urlRequest.method = "GET";
    urlRequest.auto_follow_redirects = true;
    var urlRequestPromise = urlLoaderConnection.remote.start(urlRequest);
    urlRequestPromise.then(function(result) {
      console.log("url => " + result.response["url"]);
      console.log("status_line => " + result.response["status_line"]);
      console.log("mime_type => " + result.response["mime_type"]);
      var drainDataPromise = core.drainData(result.response.body);
      drainDataPromise.then(function(result) {
        console.log("read " + result.buffer.byteLength + " bytes");
        done();
      }).catch(function() {
        assert.ok(false, "core.drainData failed");
        done();
      });
    }).catch(function() {
      assert.ok(false, "start failed");
      done();
    });
  });
});
</script>
</html>
