xref: /aosp_15_r20/external/sandboxed-api/oss-internship-2020/curl/tests/tests.cc (revision ec63e07ab9515d95e79c211197c445ef84cefa6a)
1*ec63e07aSXin Li // Copyright 2020 Google LLC
2*ec63e07aSXin Li //
3*ec63e07aSXin Li // Licensed under the Apache License, Version 2.0 (the "License");
4*ec63e07aSXin Li // you may not use this file except in compliance with the License.
5*ec63e07aSXin Li // You may obtain a copy of the License at
6*ec63e07aSXin Li //
7*ec63e07aSXin Li //     https://www.apache.org/licenses/LICENSE-2.0
8*ec63e07aSXin Li //
9*ec63e07aSXin Li // Unless required by applicable law or agreed to in writing, software
10*ec63e07aSXin Li // distributed under the License is distributed on an "AS IS" BASIS,
11*ec63e07aSXin Li // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*ec63e07aSXin Li // See the License for the specific language governing permissions and
13*ec63e07aSXin Li // limitations under the License.
14*ec63e07aSXin Li 
15*ec63e07aSXin Li #include "test_utils.h"  // NOLINT(build/include)
16*ec63e07aSXin Li #include "sandboxed_api/util/status_matchers.h"
17*ec63e07aSXin Li 
18*ec63e07aSXin Li namespace curl::tests {
19*ec63e07aSXin Li namespace {
20*ec63e07aSXin Li 
21*ec63e07aSXin Li using ::sapi::IsOk;
22*ec63e07aSXin Li using ::sapi::StatusIs;
23*ec63e07aSXin Li using ::testing::Eq;
24*ec63e07aSXin Li using ::testing::IsTrue;
25*ec63e07aSXin Li 
26*ec63e07aSXin Li class CurlTest : public CurlTestUtils, public ::testing::Test {
27*ec63e07aSXin Li  protected:
SetUpTestSuite()28*ec63e07aSXin Li   static void SetUpTestSuite() {
29*ec63e07aSXin Li     // Start mock server, get port number and check for any error
30*ec63e07aSXin Li     StartMockServer();
31*ec63e07aSXin Li     ASSERT_THAT(server_thread_.joinable(), IsTrue());
32*ec63e07aSXin Li   }
33*ec63e07aSXin Li 
TearDownTestSuite()34*ec63e07aSXin Li   static void TearDownTestSuite() {
35*ec63e07aSXin Li     // Detach the server thread
36*ec63e07aSXin Li     server_thread_.detach();
37*ec63e07aSXin Li   }
38*ec63e07aSXin Li 
SetUp()39*ec63e07aSXin Li   void SetUp() override { ASSERT_THAT(CurlTestSetUp(), IsOk()); }
40*ec63e07aSXin Li 
TearDown()41*ec63e07aSXin Li   void TearDown() override { ASSERT_THAT(CurlTestTearDown(), IsOk()); }
42*ec63e07aSXin Li };
43*ec63e07aSXin Li 
TEST_F(CurlTest,EffectiveUrl)44*ec63e07aSXin Li TEST_F(CurlTest, EffectiveUrl) {
45*ec63e07aSXin Li   ASSERT_THAT(PerformRequest().status(), IsOk());
46*ec63e07aSXin Li 
47*ec63e07aSXin Li   // Get effective URL
48*ec63e07aSXin Li   sapi::v::RemotePtr effective_url_ptr(nullptr);
49*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(
50*ec63e07aSXin Li       int getinfo_code,
51*ec63e07aSXin Li       api_->curl_easy_getinfo_ptr(curl_.get(), curl::CURLINFO_EFFECTIVE_URL,
52*ec63e07aSXin Li                                   effective_url_ptr.PtrBoth()));
53*ec63e07aSXin Li   ASSERT_THAT(getinfo_code, Eq(curl::CURLE_OK));
54*ec63e07aSXin Li 
55*ec63e07aSXin Li   // Store effective URL in a string
56*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::string effective_url,
57*ec63e07aSXin Li                             sandbox_->GetCString(sapi::v::RemotePtr(
58*ec63e07aSXin Li                                 effective_url_ptr.GetPointedVar())));
59*ec63e07aSXin Li 
60*ec63e07aSXin Li   // Compare effective URL with original URL
61*ec63e07aSXin Li   ASSERT_THAT(effective_url, Eq(kUrl));
62*ec63e07aSXin Li }
63*ec63e07aSXin Li 
TEST_F(CurlTest,EffectivePort)64*ec63e07aSXin Li TEST_F(CurlTest, EffectivePort) {
65*ec63e07aSXin Li   ASSERT_THAT(PerformRequest().status(), IsOk());
66*ec63e07aSXin Li 
67*ec63e07aSXin Li   // Get effective port
68*ec63e07aSXin Li   sapi::v::Int effective_port;
69*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(
70*ec63e07aSXin Li       int getinfo_code,
71*ec63e07aSXin Li       api_->curl_easy_getinfo_ptr(curl_.get(), curl::CURLINFO_PRIMARY_PORT,
72*ec63e07aSXin Li                                   effective_port.PtrBoth()));
73*ec63e07aSXin Li   ASSERT_EQ(getinfo_code, curl::CURLE_OK);
74*ec63e07aSXin Li 
75*ec63e07aSXin Li   // Compare effective port with port set by the mock server
76*ec63e07aSXin Li   ASSERT_EQ(effective_port.GetValue(), port_);
77*ec63e07aSXin Li }
78*ec63e07aSXin Li 
TEST_F(CurlTest,ResponseCode)79*ec63e07aSXin Li TEST_F(CurlTest, ResponseCode) {
80*ec63e07aSXin Li   ASSERT_THAT(PerformRequest().status(), IsOk());
81*ec63e07aSXin Li 
82*ec63e07aSXin Li   // Get response code
83*ec63e07aSXin Li   sapi::v::Int response_code;
84*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(
85*ec63e07aSXin Li       int getinfo_code,
86*ec63e07aSXin Li       api_->curl_easy_getinfo_ptr(curl_.get(), curl::CURLINFO_RESPONSE_CODE,
87*ec63e07aSXin Li                                   response_code.PtrBoth()));
88*ec63e07aSXin Li   ASSERT_EQ(getinfo_code, curl::CURLE_OK);
89*ec63e07aSXin Li 
90*ec63e07aSXin Li   // Check response code
91*ec63e07aSXin Li   ASSERT_EQ(response_code.GetValue(), 200);
92*ec63e07aSXin Li }
93*ec63e07aSXin Li 
TEST_F(CurlTest,ContentType)94*ec63e07aSXin Li TEST_F(CurlTest, ContentType) {
95*ec63e07aSXin Li   sapi::v::RemotePtr content_type_ptr(nullptr);
96*ec63e07aSXin Li 
97*ec63e07aSXin Li   ASSERT_TRUE(PerformRequest().ok());
98*ec63e07aSXin Li 
99*ec63e07aSXin Li   // Get effective URL
100*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(
101*ec63e07aSXin Li       int getinfo_code,
102*ec63e07aSXin Li       api_->curl_easy_getinfo_ptr(curl_.get(), curl::CURLINFO_CONTENT_TYPE,
103*ec63e07aSXin Li                                   content_type_ptr.PtrBoth()));
104*ec63e07aSXin Li   ASSERT_EQ(getinfo_code, curl::CURLE_OK);
105*ec63e07aSXin Li 
106*ec63e07aSXin Li   // Store content type in a string
107*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::string content_type,
108*ec63e07aSXin Li                             sandbox_->GetCString(sapi::v::RemotePtr(
109*ec63e07aSXin Li                                 content_type_ptr.GetPointedVar())));
110*ec63e07aSXin Li 
111*ec63e07aSXin Li   // Compare content type with "text/plain"
112*ec63e07aSXin Li   ASSERT_EQ(content_type, "text/plain");
113*ec63e07aSXin Li }
114*ec63e07aSXin Li 
TEST_F(CurlTest,GetResponse)115*ec63e07aSXin Li TEST_F(CurlTest, GetResponse) {
116*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::string response, PerformRequest());
117*ec63e07aSXin Li 
118*ec63e07aSXin Li   // Compare response with expected response
119*ec63e07aSXin Li   ASSERT_EQ(response, "OK");
120*ec63e07aSXin Li }
121*ec63e07aSXin Li 
TEST_F(CurlTest,PostResponse)122*ec63e07aSXin Li TEST_F(CurlTest, PostResponse) {
123*ec63e07aSXin Li   sapi::v::ConstCStr post_fields("postfields");
124*ec63e07aSXin Li 
125*ec63e07aSXin Li   // Set request method to POST
126*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(
127*ec63e07aSXin Li       int setopt_post,
128*ec63e07aSXin Li       api_->curl_easy_setopt_long(curl_.get(), curl::CURLOPT_POST, 1l));
129*ec63e07aSXin Li   ASSERT_EQ(setopt_post, curl::CURLE_OK);
130*ec63e07aSXin Li 
131*ec63e07aSXin Li   // Set the size of the POST fields
132*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(
133*ec63e07aSXin Li       int setopt_post_fields_size,
134*ec63e07aSXin Li       api_->curl_easy_setopt_long(curl_.get(), curl::CURLOPT_POSTFIELDSIZE,
135*ec63e07aSXin Li                                   post_fields.GetSize()));
136*ec63e07aSXin Li   ASSERT_EQ(setopt_post_fields_size, curl::CURLE_OK);
137*ec63e07aSXin Li 
138*ec63e07aSXin Li   // Set the POST fields
139*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(
140*ec63e07aSXin Li       int setopt_post_fields,
141*ec63e07aSXin Li       api_->curl_easy_setopt_ptr(curl_.get(), curl::CURLOPT_POSTFIELDS,
142*ec63e07aSXin Li                                  post_fields.PtrBefore()));
143*ec63e07aSXin Li   ASSERT_EQ(setopt_post_fields, curl::CURLE_OK);
144*ec63e07aSXin Li 
145*ec63e07aSXin Li   SAPI_ASSERT_OK_AND_ASSIGN(std::string response, PerformRequest());
146*ec63e07aSXin Li 
147*ec63e07aSXin Li   // Compare response with expected response
148*ec63e07aSXin Li   ASSERT_EQ(std::string(post_fields.GetData()), response);
149*ec63e07aSXin Li }
150*ec63e07aSXin Li 
151*ec63e07aSXin Li }  // namespace
152*ec63e07aSXin Li }  // namespace curl::tests
153