« index

Coverage for /Users/kris/q-io/spec/http-apps/proxy-spec.js : 100%

80 lines | 80 run | 0 missing | 0 partial | 11 blocks | 11 blocks run | 0 blocks missing

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

  require("../lib/jasmine-promise");
  var Q = require("q");
  var Http = require("../../http");
  var Apps = require("../../http-apps");
  var FS = require("../../fs");
  
  describe("http proxy", function () {
  
      it("should work", function () {
  
          var requestProxy;
          var responseProxy;
          var requestActual;
          var responseActual;
  
          var app = Apps.Chain()
          .use(Apps.Trap, function (response) {
              responseActual = response;
              return response;
          })
          .use(Apps.Tap, function (request) {
              requestActual = request;
          })
          .use(function (next) {
              return Apps.Branch({
                  "foo": Apps.Branch({
                      "bar": new Apps.Chain()
                          .use(Apps.Cap)
                          .use(function () {
                              return Apps.Content(["Hello, World!"])
                          })
                          .end()
                  })
              })
          })
          .end();
  
          var server1 = Http.Server(app);
  
          return Q.when(server1.listen(0))
          .then(function (server1) {
              var port = server1.node.address().port;
  
              var server2 = Http.Server(
                  Apps.Trap(
                      Apps.Tap(
                          Apps.ProxyTree("http://127.0.0.1:" + port + "/foo/"),
                          function (request) {
                              requestProxy = request;
                          }
                      ),
                      function (response) {
                          responseProxy = response;
                          return response;
                      }
                  )
              );
  
              return [server1, server2.listen(0)];
          })
          .spread(function (server1, server2) {
              var port = server2.node.address().port;
              return Http.read({
                  url: "http://127.0.0.1:" + port + "/bar",
                  charset: "utf-8"
              })
              .then(function (content) {
                  expect(content).toBe("Hello, World!");
                  expect(requestActual).toBeTruthy();
                  expect(responseActual).toBeTruthy();
                  expect(requestProxy).toBeTruthy();
                  expect(responseProxy).toBeTruthy();
              })
              .finally(server1.stop)
              .finally(server2.stop)
          })
  
      });
  
  });
« index | cover.io