Coverage for gws-app/gws/lib/net/_test.py: 0%

59 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-17 01:37 +0200

1import gws 

2import gws.lib.net as net 

3import gws.test.util as u 

4 

5 

6def test_parse_url(): 

7 url = 'http://foo.bar:1234/path/to/file.ext?lower=AA%2FBB%3ACC&UPPER=DDD#hash' 

8 p = net.parse_url(url) 

9 r = { 

10 'fragment': 'hash', 

11 'hostname': 'foo.bar', 

12 'netloc': 'foo.bar:1234', 

13 'params': {'lower': 'AA/BB:CC', 'upper': 'DDD'}, 

14 'path': '/path/to/file.ext', 

15 'password': '', 

16 'pathparts': { 

17 'dirname': '/path/to', 

18 'extension': 'ext', 

19 'filename': 'file.ext', 

20 'name': 'file' 

21 }, 

22 'port': '1234', 

23 'qsl': [('lower', 'AA/BB:CC'), ('UPPER', 'DDD')], 

24 'query': 'lower=AA%2FBB%3ACC&UPPER=DDD', 

25 'scheme': 'http', 

26 'url': url, 

27 'username': '', 

28 } 

29 assert vars(p) == r 

30 

31 

32def test_make_url(): 

33 r = { 

34 'fragment': 'hash', 

35 'hostname': 'foo.bar', 

36 'params': {'p1': 'AA A', 'p2': 'BB&B'}, 

37 'path': '/path/to/file.ext', 

38 'password': 'PASS', 

39 'port': '1234', 

40 'scheme': 'http', 

41 'username': 'USER', 

42 } 

43 p = net.make_url(r) 

44 assert p == 'http://USER:PASS@foo.bar:1234/path/to/file.ext?p1=AA%20A&p2=BB%26B#hash' 

45 

46 

47def test_request_ok(): 

48 u.mockserver.set(rf''' 

49 if path == '/ok': 

50 return end('HELLO') 

51 ''') 

52 res = net.http_request(u.mockserver.url('ok')) 

53 assert (res.ok, res.status_code, res.text) == (True, 200, 'HELLO') 

54 

55 

56def test_request_redirect_ok(): 

57 target_url = u.mockserver.url('ok') 

58 u.mockserver.set(rf''' 

59 if path == '/ok': 

60 return end('HELLO') 

61 if path == '/redir': 

62 return end('', status=301, location={target_url!r}) 

63 ''') 

64 res = net.http_request(u.mockserver.url('redir')) 

65 assert (res.ok, res.status_code, res.text) == (True, 200, 'HELLO') 

66 

67 

68def test_request_404(): 

69 res = net.http_request(u.mockserver.url('NOT_FOUND')) 

70 assert (res.ok, res.status_code) == (False, 404) 

71 

72 

73def test_request_timeout(): 

74 u.mockserver.set(rf''' 

75 if path == '/timeout': 

76 gws.u.sleep(3) 

77 return end('') 

78 ''') 

79 

80 res = net.http_request(u.mockserver.url('timeout'), timeout=1) 

81 assert (res.ok, res.status_code) == (False, 901) 

82 

83 res = net.http_request(u.mockserver.url('timeout'), timeout=100) 

84 assert (res.ok, res.status_code) == (True, 200) 

85 

86 

87def test_request_connection_error(): 

88 res = net.http_request('255.255.255.255') 

89 assert (res.ok, res.status_code) == (False, 999) 

90 

91 

92def test_request_valid_response_cached(): 

93 u.mockserver.set(rf''' 

94 if path == '/ok': 

95 return end('ORIGINAL') 

96 ''') 

97 

98 res = net.http_request(u.mockserver.url('ok'), max_age=3) 

99 assert res.text == 'ORIGINAL' 

100 

101 u.mockserver.set(rf''' 

102 if path == '/ok': 

103 return end('UPDATED') 

104 ''') 

105 

106 res = net.http_request(u.mockserver.url('ok'), max_age=3) 

107 assert res.text == 'ORIGINAL' 

108 

109 res = net.http_request(u.mockserver.url('ok')) 

110 assert res.text == 'UPDATED' 

111 

112 

113def test_request_cache_expiration(): 

114 u.mockserver.set(rf''' 

115 if path == '/ok': 

116 return end('ORIGINAL') 

117 ''') 

118 res = net.http_request(u.mockserver.url('ok'), max_age=3) 

119 assert res.text == 'ORIGINAL' 

120 

121 u.mockserver.set(rf''' 

122 if path == '/ok': 

123 return end('UPDATED') 

124 ''') 

125 

126 res = net.http_request(u.mockserver.url('ok'), max_age=3) 

127 assert res.text == 'ORIGINAL' 

128 

129 gws.u.sleep(4) 

130 

131 res = net.http_request(u.mockserver.url('ok'), max_age=3) 

132 assert res.text == 'UPDATED' 

133 

134 

135def test_request_invalid_response_not_cached(): 

136 u.mockserver.set(rf''' 

137 if path == '/bad': 

138 return end('ORIGINAL', 400) 

139 ''') 

140 

141 res = net.http_request(u.mockserver.url('bad'), max_age=10) 

142 assert res.text == 'ORIGINAL' 

143 

144 u.mockserver.set(rf''' 

145 if path == '/bad': 

146 return end('UPDATED', 400) 

147 ''') 

148 

149 res = net.http_request(u.mockserver.url('bad'), max_age=10) 

150 assert res.text == 'UPDATED'