this repo has no description
1import { Httpx } from "https://jslib.k6.io/httpx/0.1.0/index.js";
2import exec from "k6/execution";
3
4const initialToken = "123";
5export const token = __ENV.TOKEN ?? initialToken;
6
7const paymentProcessorDefaultHttp = new Httpx({
8 baseURL: "http://localhost:8001",
9 headers: {
10 "Content-Type": "application/json",
11 "X-Rinha-Token": token,
12 },
13 timeout: 1500,
14});
15
16const paymentProcessorFallbacktHttp = new Httpx({
17 baseURL: "http://localhost:8002",
18 headers: {
19 "Content-Type": "application/json",
20 "X-Rinha-Token": token,
21 },
22 timeout: 1500,
23});
24
25const backendHttp = new Httpx({
26 baseURL: "http://localhost:9999",
27 //baseURL: "http://localhost:5123",
28 headers: {
29 "Content-Type": "application/json",
30 },
31 timeout: 1500,
32});
33
34const paymentProcessorHttp = {
35 default: paymentProcessorDefaultHttp,
36 fallback: paymentProcessorFallbacktHttp,
37};
38
39export async function setPPToken(service, token) {
40 const httpClient = paymentProcessorHttp[service];
41 const params = { headers: { "X-Rinha-Token": initialToken } };
42
43 const payload = JSON.stringify({
44 token: token,
45 });
46
47 const response = await httpClient.asyncPut(
48 "/admin/configurations/token",
49 payload,
50 params,
51 );
52
53 if (response.status != 204) {
54 exec.test.abort(
55 `Erro ao definir token para ${service} (HTTP ${response.status}).`,
56 );
57 }
58}
59
60export async function setPPDelay(service, ms) {
61 const httpClient = paymentProcessorHttp[service];
62
63 const payload = JSON.stringify({
64 delay: ms,
65 });
66
67 const response = await httpClient.asyncPut(
68 "/admin/configurations/delay",
69 payload,
70 );
71
72 if (response.status != 200) {
73 exec.test.abort(
74 `Erro ao definir delay para ${service} (HTTP ${response.status}).`,
75 );
76 }
77}
78
79export async function setPPFailure(service, failure) {
80 const httpClient = paymentProcessorHttp[service];
81
82 const payload = JSON.stringify({
83 failure: failure,
84 });
85
86 const response = await httpClient.asyncPut(
87 "/admin/configurations/failure",
88 payload,
89 );
90
91 if (response.status != 200) {
92 exec.test.abort(
93 `Erro ao definir failure para ${service} (HTTP ${response.status}).`,
94 );
95 }
96}
97
98export async function resetPPDatabase(service) {
99 const httpClient = paymentProcessorHttp[service];
100 const response = await httpClient.asyncPost("/admin/purge-payments");
101
102 if (response.status != 200) {
103 exec.test.abort(
104 `Erro ao resetar database para ${service} (HTTP ${response.status}).`,
105 );
106 }
107}
108
109export async function getPPPaymentsSummary(service, from, to) {
110 const httpClient = paymentProcessorHttp[service];
111 const response = await httpClient.asyncGet(
112 `/admin/payments-summary?from=${from}&to=${to}`,
113 );
114
115 if (response.status == 200) {
116 return JSON.parse(response.body);
117 }
118
119 console.error(
120 `Não foi possível obter resposta de '/admin/payments-summary?from=${from}&to=${to}' para ${service} (HTTP ${response.status})`,
121 );
122
123 return {
124 totalAmount: 0,
125 totalRequests: 0,
126 feePerTransaction: 0,
127 totalFee: 0,
128 };
129}
130
131export async function resetBackendDatabase() {
132 try {
133 await backendHttp.asyncPost("/purge-payments");
134 } catch (error) {
135 console.info(
136 "Seu backend provavelmente não possui um endpoint para resetar o banco. Isso não é um problem.",
137 error.message,
138 );
139 }
140}
141
142export async function getBackendPaymentsSummary(from, to) {
143 const response = await backendHttp.asyncGet(
144 `/payments-summary?from=${from}&to=${to}`,
145 );
146
147 if (response.status == 200) {
148 return JSON.parse(response.body);
149 }
150
151 console.error(
152 `Não foi possível obter resposta de '/payments-summary?from=${from}&to=${to}' para o backend (HTTP ${response.status})`,
153 );
154
155 return {
156 default: {
157 totalAmount: 0,
158 totalRequests: 0,
159 },
160 fallback: {
161 totalAmount: 0,
162 totalRequests: 0,
163 },
164 };
165}
166
167export async function requestBackendPayment(payload) {
168 const response = await backendHttp.asyncPost(
169 "/payments",
170 JSON.stringify(payload),
171 );
172 return response;
173}