-
Notifications
You must be signed in to change notification settings - Fork 132
/
recorder_httpc_test.exs
124 lines (103 loc) · 4.45 KB
/
recorder_httpc_test.exs
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
defmodule ExVCR.RecorderHttpcTest do
use ExUnit.Case, async: true
use ExVCR.Mock, adapter: ExVCR.Adapter.Httpc
@dummy_cassette_dir "tmp/vcr_tmp/vcr_cassettes_httpc"
@port 35001
@url 'http://localhost:#{@port}/server'
@url_with_query 'http://localhost:#{@port}/server?password=sample'
setup_all do
on_exit fn ->
File.rm_rf(@dummy_cassette_dir)
HttpServer.stop(@port)
:ok
end
Application.ensure_started(:inets)
HttpServer.start(path: "/server", port: @port, response: "test_response")
:ok
end
setup do
ExVCR.Config.cassette_library_dir(@dummy_cassette_dir)
end
test "forcefully getting response from server by removing json in advance" do
use_cassette "server1" do
{:ok, {_, _, body}} = :httpc.request(@url)
assert body =~ ~r/test_response/
end
end
test "forcefully getting response from server, then loading from cache by recording twice" do
use_cassette "server2" do
{:ok, {_, _, body}} = :httpc.request(@url)
assert body =~ ~r/test_response/
end
use_cassette "server2" do
{:ok, {_, _, body}} = :httpc.request(@url)
assert body =~ ~r/test_response/
end
end
test "replace sensitive data in body" do
ExVCR.Config.filter_sensitive_data("test_response", "PLACEHOLDER")
use_cassette "server_sensitive_data_in_body" do
{:ok, {_, _, body}} = :httpc.request(@url)
assert body =~ ~r/PLACEHOLDER/
end
ExVCR.Config.filter_sensitive_data(nil)
end
test "replace sensitive data in query " do
ExVCR.Config.filter_sensitive_data("password=[a-z]+", "password=***")
use_cassette "server_sensitive_data_in_query" do
{:ok, {_, _, body}} = :httpc.request(@url_with_query)
assert body =~ ~r/test_response/
end
# The recorded cassette should contain replaced data.
cassette = File.read!("#{@dummy_cassette_dir}/server_sensitive_data_in_query.json")
assert cassette =~ "password=***"
refute cassette =~ "password=sample"
ExVCR.Config.filter_sensitive_data(nil)
end
test "replace sensitive data in request header" do
ExVCR.Config.filter_request_headers("X-My-Secret-Token")
use_cassette "sensitive_data_in_request_header" do
{:ok, {_, _, body}} = :httpc.request(:get, {@url_with_query, [{'X-My-Secret-Token', 'my-secret-token'}]}, [], [])
assert body == "test_response"
end
# The recorded cassette should contain replaced data.
cassette = File.read!("#{@dummy_cassette_dir}/sensitive_data_in_request_header.json")
assert cassette =~ "\"X-My-Secret-Token\": \"***\""
refute cassette =~ "\"X-My-Secret-Token\": \"my-secret-token\""
ExVCR.Config.filter_request_headers(nil)
end
test "replace sensitive data in matching request header" do
ExVCR.Config.filter_sensitive_data("Basic [a-z]+", "Basic ***")
use_cassette "sensitive_data_matches_in_request_headers", match_requests_on: [:headers] do
{:ok, {_, _, body}} = :httpc.request(:get, {@url_with_query, [{'Authorization', 'Basic credentials'}]}, [], [])
assert body =~ ~r/test_response/
end
# The recorded cassette should contain replaced data.
cassette = File.read!("#{@dummy_cassette_dir}/sensitive_data_matches_in_request_headers.json")
assert cassette =~ "\"Authorization\": \"Basic ***\""
# Attempt another request should match on filtered header
use_cassette "sensitive_data_matches_in_request_headers", match_requests_on: [:headers] do
{:ok, {_, _, body}} = :httpc.request(:get, {@url_with_query, [{'Authorization', 'Basic credentials'}]}, [], [])
assert body =~ ~r/test_response/
end
ExVCR.Config.filter_sensitive_data(nil)
end
test "filter url param flag removes url params when recording cassettes" do
ExVCR.Config.filter_url_params(true)
use_cassette "example_ignore_url_params" do
{:ok, {_, _, body}} = :httpc.request('#{@url}?should_not_be_contained')
assert body =~ ~r/test_response/
end
json = File.read!("#{__DIR__}/../#{@dummy_cassette_dir}/example_ignore_url_params.json")
refute String.contains?(json, "should_not_be_contained")
ExVCR.Config.filter_url_params(false)
end
test "remove blacklisted headers" do
ExVCR.Config.response_headers_blacklist(["Date"])
use_cassette "remove_blacklisted_headers" do
{:ok, {_, headers, _}} = :httpc.request(@url)
assert Enum.sort(headers) == Enum.sort([{'server', 'Cowboy'}, {'content-length', '13'}])
end
ExVCR.Config.response_headers_blacklist([])
end
end