text: /*
  * test for rule replaceOption rule
  *
  */
  const AnyProxy = require('../../proxy');
  const {
    proxyGet,
    directGet,
    generateUrl,
  } = require('../util/HttpUtil.js');
  const Server = require('../server/server.js');
  
  describe('AnyProxy.proxyServer basic test', () => {
    it('should successfully start a proxy server', done => {
      const options = {
        port: 8001,
        rule: null,
        webInterface: {
          enable: true,
          webPort: 8002
        },
        throttle: 10000,
        forceProxyHttps: false,
        silent: false
      };
      const proxyServer = new AnyProxy.ProxyServer(options);
      proxyServer.on('ready', () => {
        proxyServer.close();
        done();
      });
      proxyServer.on('error', done.fail);
      proxyServer.start();
    });
  });
  
  describe('AnyProxy.proxyServer high order test', () => {
    let proxyServer;
    let serverInstance;
    beforeAll(done => {
      // jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000;
      serverInstance = new Server();
  
      const options = {
        port: 8001,
        rule: null,
        webInterface: {
          enable: true,
          webPort: 8002,
        },
        throttle: 10000,
        forceProxyHttps: false,
        silent: false
      };
      proxyServer = new AnyProxy.ProxyServer(options);
      proxyServer.on('ready', done);
      proxyServer.start();
    });
  
    afterAll(() => {
      proxyServer && proxyServer.close();
      serverInstance && serverInstance.close();
    });
  
    it('should work as expected for domain host', done => {
      // test if proxy server works
      proxyGet('https://www.tmall.com', {}, {})
        .then(res => {
          expect(res && res.statusCode && res.statusCode === 200 && res.body.length > 300).toBe(true);
          done();
        })
        .catch(done);
    });
  
    it('should work as expected for ip host', done => {
      // test if proxy server works
      proxyGet(generateUrl('https', '/test'), {}, {})
        .then(res => {
          expect(res && res.statusCode && res.statusCode === 200).toBe(true);
          done();
        })
        .catch(done);
    });
  
    it('should start webinterface correctly', done => {
      // test web interface
      directGet('http://127.0.0.1:8002', {}, {})
        .then(res => {
          expect(res && res.statusCode && res.statusCode === 200 && res.body.length > 300).toBe(true);
          done();
        })
        .catch(done);
    });
  
    it('should deal well with the gzip encoding response', done => {
      proxyGet(generateUrl('https', '/test/gzip'), {}, {})
        .then(res => {
          expect(res && res.statusCode === 200).toBe(true);
          expect(JSON.parse(res.body).type).toBe('gzip');
          done();
        })
        .catch(done);
    });
  
    it('should deal well with the deflate encoding response', done => {
      proxyGet(generateUrl('https', '/test/deflate'), {}, {})
        .then(res => {
          expect(res && res.statusCode === 200).toBe(true);
          expect(JSON.parse(res.body).type).toBe('deflate');
          done();
        })
        .catch(done);
    });
  
    it('should deal well with the brotli encoding response', done => {
      proxyGet(generateUrl('https', '/test/brotli'), {}, {})
        .then(res => {
          expect(res && res.statusCode === 200).toBe(true);
          expect(JSON.parse(res.body).type).toBe('brotli');
          done();
        })
        .catch(done);
    });
  });
  