11e934351Sopenharmony_ci/*
21e934351Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
31e934351Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41e934351Sopenharmony_ci * you may not use this file except in compliance with the License.
51e934351Sopenharmony_ci * You may obtain a copy of the License at
61e934351Sopenharmony_ci *
71e934351Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
81e934351Sopenharmony_ci *
91e934351Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101e934351Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111e934351Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121e934351Sopenharmony_ci * See the License for the specific language governing permissions and
131e934351Sopenharmony_ci * limitations under the License.
141e934351Sopenharmony_ci */
151e934351Sopenharmony_ci
161e934351Sopenharmony_ci#include <algorithm>
171e934351Sopenharmony_ci#include <cstring>
181e934351Sopenharmony_ci
191e934351Sopenharmony_ci#include "gtest/gtest.h"
201e934351Sopenharmony_ci
211e934351Sopenharmony_ci#include "http_cache_request.h"
221e934351Sopenharmony_ci#include "http_cache_response.h"
231e934351Sopenharmony_ci#include "http_cache_strategy.h"
241e934351Sopenharmony_ci#include "netstack_log.h"
251e934351Sopenharmony_ci
261e934351Sopenharmony_ciusing namespace OHOS::NetStack::Http;
271e934351Sopenharmony_ci
281e934351Sopenharmony_ciclass HttpCacheStrategyTest : public testing::Test {
291e934351Sopenharmony_cipublic:
301e934351Sopenharmony_ci    static void SetUpTestCase() {}
311e934351Sopenharmony_ci
321e934351Sopenharmony_ci    static void TearDownTestCase() {}
331e934351Sopenharmony_ci
341e934351Sopenharmony_ci    virtual void SetUp() {}
351e934351Sopenharmony_ci
361e934351Sopenharmony_ci    virtual void TearDown() {}
371e934351Sopenharmony_ci};
381e934351Sopenharmony_ci
391e934351Sopenharmony_cinamespace {
401e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, cacheRequestNoCache, testing::ext::TestSize.Level1)
411e934351Sopenharmony_ci{
421e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
431e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "no-cache");
441e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
451e934351Sopenharmony_ci
461e934351Sopenharmony_ci    HttpResponse response;
471e934351Sopenharmony_ci    response.SetResponseCode(200);
481e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
491e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
501e934351Sopenharmony_ci    responseHeader["expires"] = "Sat, 04 Jun 2022 09:56:21 GMT";
511e934351Sopenharmony_ci
521e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
531e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
541e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
551e934351Sopenharmony_ci
561e934351Sopenharmony_ci    EXPECT_EQ(status, 2);
571e934351Sopenharmony_ci}
581e934351Sopenharmony_ci
591e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, computeFreshnessLifetimeLastModifiedBranch, testing::ext::TestSize.Level1)
601e934351Sopenharmony_ci{
611e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
621e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
631e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
641e934351Sopenharmony_ci
651e934351Sopenharmony_ci    HttpResponse response;
661e934351Sopenharmony_ci    response.SetResponseCode(200);
671e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
681e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
691e934351Sopenharmony_ci    responseHeader["Cache-Control"] = "public";
701e934351Sopenharmony_ci    responseHeader["last-modified"] = "Thu, 10 Feb 2022 10:55:14 GMT";
711e934351Sopenharmony_ci    responseHeader["date"] = "Fri, 20 May 2022 09:37:29 GMT";
721e934351Sopenharmony_ci
731e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
741e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
751e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
761e934351Sopenharmony_ci
771e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
781e934351Sopenharmony_ci}
791e934351Sopenharmony_ci
801e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, cacheResponseNoCache, testing::ext::TestSize.Level1)
811e934351Sopenharmony_ci{
821e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
831e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
841e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
851e934351Sopenharmony_ci
861e934351Sopenharmony_ci    HttpResponse response;
871e934351Sopenharmony_ci    response.SetResponseCode(200);
881e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
891e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
901e934351Sopenharmony_ci    responseHeader["Cache-Control"] = "no-cache";
911e934351Sopenharmony_ci
921e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
931e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
941e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
951e934351Sopenharmony_ci
961e934351Sopenharmony_ci    EXPECT_EQ(status, 1);
971e934351Sopenharmony_ci}
981e934351Sopenharmony_ci
991e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, cacheRequestOnlyIfCached, testing::ext::TestSize.Level1)
1001e934351Sopenharmony_ci{
1011e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
1021e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "only-if-cached");
1031e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
1041e934351Sopenharmony_ci
1051e934351Sopenharmony_ci    HttpResponse response;
1061e934351Sopenharmony_ci    response.SetResponseCode(200);
1071e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
1081e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
1091e934351Sopenharmony_ci    responseHeader["Cache-Control"] = "max-age=70";
1101e934351Sopenharmony_ci
1111e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
1121e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
1131e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
1141e934351Sopenharmony_ci
1151e934351Sopenharmony_ci    EXPECT_EQ(status, 0);
1161e934351Sopenharmony_ci}
1171e934351Sopenharmony_ci
1181e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, isCacheable, testing::ext::TestSize.Level1)
1191e934351Sopenharmony_ci{
1201e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
1211e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
1221e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
1231e934351Sopenharmony_ci
1241e934351Sopenharmony_ci    HttpResponse response;
1251e934351Sopenharmony_ci    response.SetResponseCode(303);
1261e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
1271e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
1281e934351Sopenharmony_ci    responseHeader["Cache-Control"] = "max-age=70";
1291e934351Sopenharmony_ci
1301e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
1311e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
1321e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
1331e934351Sopenharmony_ci
1341e934351Sopenharmony_ci    EXPECT_EQ(status, 2);
1351e934351Sopenharmony_ci}
1361e934351Sopenharmony_ci
1371e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, isCacheable_OK, testing::ext::TestSize.Level1)
1381e934351Sopenharmony_ci{
1391e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
1401e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
1411e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
1421e934351Sopenharmony_ci
1431e934351Sopenharmony_ci    HttpResponse response;
1441e934351Sopenharmony_ci    response.SetResponseCode(200);
1451e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
1461e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
1471e934351Sopenharmony_ci    responseHeader["Cache-Control"] = "max-age=70";
1481e934351Sopenharmony_ci
1491e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
1501e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
1511e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
1521e934351Sopenharmony_ci
1531e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
1541e934351Sopenharmony_ci}
1551e934351Sopenharmony_ci
1561e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, requestIfModifiedSinceStr, testing::ext::TestSize.Level1)
1571e934351Sopenharmony_ci{
1581e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
1591e934351Sopenharmony_ci    requestOptions.SetHeader("if-modified-since", "Thu, 10 Feb 2022 10:55:14 GMT");
1601e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
1611e934351Sopenharmony_ci
1621e934351Sopenharmony_ci    HttpResponse response;
1631e934351Sopenharmony_ci    response.SetResponseCode(200);
1641e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
1651e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
1661e934351Sopenharmony_ci    responseHeader["Cache-Control"] = "max-age=70";
1671e934351Sopenharmony_ci
1681e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
1691e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
1701e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
1711e934351Sopenharmony_ci
1721e934351Sopenharmony_ci    EXPECT_EQ(status, 2);
1731e934351Sopenharmony_ci}
1741e934351Sopenharmony_ci
1751e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, requestgetIfNoneMatch, testing::ext::TestSize.Level1)
1761e934351Sopenharmony_ci{
1771e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
1781e934351Sopenharmony_ci    requestOptions.SetHeader("if-none-match", "A6E52F1D544D9DAFB552163A1CF8AD10");
1791e934351Sopenharmony_ci    requestOptions.SetHeader("if-modified-since", "Thu, 10 Feb 2022 10:55:14 GMT");
1801e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
1811e934351Sopenharmony_ci
1821e934351Sopenharmony_ci    HttpResponse response;
1831e934351Sopenharmony_ci    response.SetResponseCode(200);
1841e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
1851e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
1861e934351Sopenharmony_ci    responseHeader["Cache-Control"] = "max-age=70";
1871e934351Sopenharmony_ci
1881e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
1891e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
1901e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
1911e934351Sopenharmony_ci
1921e934351Sopenharmony_ci    EXPECT_EQ(status, 2);
1931e934351Sopenharmony_ci}
1941e934351Sopenharmony_ci
1951e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, requestgetIfNoneMatchAndIfModifiedSinceStr, testing::ext::TestSize.Level1)
1961e934351Sopenharmony_ci{
1971e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
1981e934351Sopenharmony_ci    requestOptions.SetHeader("if-none-match", "A6E52F1D544D9DAFB552163A1CF8AD10");
1991e934351Sopenharmony_ci    requestOptions.SetHeader("if-modified-since", "Thu, 10 Feb 2022 10:55:14 GMT");
2001e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
2011e934351Sopenharmony_ci
2021e934351Sopenharmony_ci    HttpResponse response;
2031e934351Sopenharmony_ci    response.SetResponseCode(200);
2041e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
2051e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
2061e934351Sopenharmony_ci    responseHeader["Cache-Control"] = "max-age=70";
2071e934351Sopenharmony_ci
2081e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
2091e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
2101e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
2111e934351Sopenharmony_ci
2121e934351Sopenharmony_ci    EXPECT_EQ(status, 2);
2131e934351Sopenharmony_ci}
2141e934351Sopenharmony_ci
2151e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, strategyMaxAgeBranch, testing::ext::TestSize.Level1) // test
2161e934351Sopenharmony_ci{
2171e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
2181e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "max-age=10");
2191e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:19 GMT");
2201e934351Sopenharmony_ci
2211e934351Sopenharmony_ci    HttpResponse response;
2221e934351Sopenharmony_ci    response.SetResponseCode(200);
2231e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:30 GMT");
2241e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
2251e934351Sopenharmony_ci    responseHeader["Cache-Control"] = "max-age=70";
2261e934351Sopenharmony_ci
2271e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
2281e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
2291e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
2301e934351Sopenharmony_ci
2311e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
2321e934351Sopenharmony_ci}
2331e934351Sopenharmony_ci
2341e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, CompareNumber_1, testing::ext::TestSize.Level1)
2351e934351Sopenharmony_ci{
2361e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
2371e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
2381e934351Sopenharmony_ci
2391e934351Sopenharmony_ci    HttpResponse response;
2401e934351Sopenharmony_ci    response.SetResponseCode(200);
2411e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
2421e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
2431e934351Sopenharmony_ci    responseHeader["age"] = "33781";
2441e934351Sopenharmony_ci
2451e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
2461e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
2471e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
2481e934351Sopenharmony_ci
2491e934351Sopenharmony_ci    EXPECT_EQ(status, 1);
2501e934351Sopenharmony_ci}
2511e934351Sopenharmony_ci
2521e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, CompareNumber_1_2, testing::ext::TestSize.Level1)
2531e934351Sopenharmony_ci{
2541e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
2551e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
2561e934351Sopenharmony_ci
2571e934351Sopenharmony_ci    HttpResponse response;
2581e934351Sopenharmony_ci    response.SetResponseCode(200);
2591e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
2601e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
2611e934351Sopenharmony_ci    responseHeader["age"] = "33781";
2621e934351Sopenharmony_ci    responseHeader["etag"] = "6f6741d197947f9f10943d36c4d8210e";
2631e934351Sopenharmony_ci
2641e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
2651e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
2661e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
2671e934351Sopenharmony_ci
2681e934351Sopenharmony_ci    EXPECT_EQ(status, 1);
2691e934351Sopenharmony_ci}
2701e934351Sopenharmony_ci
2711e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, CompareNumber_2, testing::ext::TestSize.Level1)
2721e934351Sopenharmony_ci{
2731e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
2741e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
2751e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "max-age=10");
2761e934351Sopenharmony_ci
2771e934351Sopenharmony_ci    HttpResponse response;
2781e934351Sopenharmony_ci    response.SetResponseCode(200);
2791e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
2801e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
2811e934351Sopenharmony_ci    responseHeader["age"] = "10";
2821e934351Sopenharmony_ci    responseHeader["cache-control"] = "private";
2831e934351Sopenharmony_ci    responseHeader["expires"] = "Mon, 16 May 2022 10:31:58 GMT";
2841e934351Sopenharmony_ci
2851e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
2861e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
2871e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
2881e934351Sopenharmony_ci
2891e934351Sopenharmony_ci    EXPECT_EQ(status, 1);
2901e934351Sopenharmony_ci}
2911e934351Sopenharmony_ci
2921e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, CompareNumber_3, testing::ext::TestSize.Level1)
2931e934351Sopenharmony_ci{
2941e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
2951e934351Sopenharmony_ci    requestOptions.SetRequestTime("Mon, 16 May 2022 09:32:59 GMT");
2961e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "no-cache");
2971e934351Sopenharmony_ci
2981e934351Sopenharmony_ci    HttpResponse response;
2991e934351Sopenharmony_ci    response.SetResponseCode(200);
3001e934351Sopenharmony_ci    response.SetResponseTime("Mon, 16 May 2022 09:33:59 GMT");
3011e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
3021e934351Sopenharmony_ci    responseHeader["age"] = "0";
3031e934351Sopenharmony_ci
3041e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
3051e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
3061e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
3071e934351Sopenharmony_ci
3081e934351Sopenharmony_ci    EXPECT_EQ(status, 2);
3091e934351Sopenharmony_ci}
3101e934351Sopenharmony_ci
3111e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, CompareNumber_4, testing::ext::TestSize.Level1)
3121e934351Sopenharmony_ci{
3131e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
3141e934351Sopenharmony_ci    requestOptions.SetRequestTime("Mon, 16 May 2022 09:32:59 GMT");
3151e934351Sopenharmony_ci    requestOptions.SetHeader("if-modified-since", "Thu, 10 Feb 2022 10:55:14 GMT");
3161e934351Sopenharmony_ci
3171e934351Sopenharmony_ci    HttpResponse response;
3181e934351Sopenharmony_ci    response.SetResponseCode(200);
3191e934351Sopenharmony_ci    response.SetResponseTime("Mon, 16 May 2022 09:33:59 GMT");
3201e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
3211e934351Sopenharmony_ci    responseHeader["age"] = "33781";
3221e934351Sopenharmony_ci
3231e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
3241e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
3251e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
3261e934351Sopenharmony_ci
3271e934351Sopenharmony_ci    EXPECT_EQ(status, 2);
3281e934351Sopenharmony_ci}
3291e934351Sopenharmony_ci
3301e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, CompareNumber_5, testing::ext::TestSize.Level1)
3311e934351Sopenharmony_ci{
3321e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
3331e934351Sopenharmony_ci    requestOptions.SetRequestTime("Thu, 19 May 2022 08:19:59 GMT");
3341e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
3351e934351Sopenharmony_ci
3361e934351Sopenharmony_ci    HttpResponse response;
3371e934351Sopenharmony_ci    response.SetResponseCode(200);
3381e934351Sopenharmony_ci    response.SetResponseTime("Thu, 19 May 2022 08:21:59 GMT");
3391e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
3401e934351Sopenharmony_ci    responseHeader["expires"] = "Thu, 19 May 2022 08:22:26 GMT";
3411e934351Sopenharmony_ci
3421e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
3431e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
3441e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
3451e934351Sopenharmony_ci
3461e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
3471e934351Sopenharmony_ci}
3481e934351Sopenharmony_ci
3491e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, CompareNumber_6, testing::ext::TestSize.Level1)
3501e934351Sopenharmony_ci{
3511e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
3521e934351Sopenharmony_ci    requestOptions.SetRequestTime("Thu, 20 May 2022 09:35:59 GMT");
3531e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
3541e934351Sopenharmony_ci
3551e934351Sopenharmony_ci    HttpResponse response;
3561e934351Sopenharmony_ci    response.SetResponseCode(200);
3571e934351Sopenharmony_ci    response.SetResponseTime("Thu, 20 May 2022 09:36:30 GMT");
3581e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
3591e934351Sopenharmony_ci    responseHeader["expires"] = "Sat, 04 Jun 2022 09:56:21 GMT";
3601e934351Sopenharmony_ci    responseHeader["date"] = "Fri, 20 May 2022 09:37:29 GMT";
3611e934351Sopenharmony_ci
3621e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
3631e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
3641e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
3651e934351Sopenharmony_ci
3661e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
3671e934351Sopenharmony_ci}
3681e934351Sopenharmony_ci
3691e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, CompareNumber_7, testing::ext::TestSize.Level1)
3701e934351Sopenharmony_ci{
3711e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
3721e934351Sopenharmony_ci    requestOptions.SetRequestTime("Thu, 20 May 2022 09:35:59 GMT");
3731e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
3741e934351Sopenharmony_ci
3751e934351Sopenharmony_ci    HttpResponse response;
3761e934351Sopenharmony_ci    response.SetResponseCode(200);
3771e934351Sopenharmony_ci    response.SetResponseTime("Thu, 20 May 2022 09:36:30 GMT");
3781e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
3791e934351Sopenharmony_ci    responseHeader["expires"] = "Sat, 04 Jun 2022 09:56:21 GMT";
3801e934351Sopenharmony_ci    responseHeader["last-modified"] = "Thu, 10 Feb 2022 10:55:14 GMT";
3811e934351Sopenharmony_ci    responseHeader["date"] = "Fri, 20 May 2022 09:37:29 GMT";
3821e934351Sopenharmony_ci
3831e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
3841e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
3851e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
3861e934351Sopenharmony_ci
3871e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
3881e934351Sopenharmony_ci}
3891e934351Sopenharmony_ci
3901e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, CompareNumber_8, testing::ext::TestSize.Level1)
3911e934351Sopenharmony_ci{
3921e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
3931e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
3941e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
3951e934351Sopenharmony_ci
3961e934351Sopenharmony_ci    HttpResponse response;
3971e934351Sopenharmony_ci    response.SetResponseCode(200);
3981e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
3991e934351Sopenharmony_ci
4001e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
4011e934351Sopenharmony_ci    responseHeader["expires"] = "Sat, 04 Jun 2022 09:56:21 GMT";
4021e934351Sopenharmony_ci    responseHeader["last-modified"] = "Thu, 10 Feb 2022 10:55:14 GMT";
4031e934351Sopenharmony_ci    responseHeader["etag"] = "6f6741d197947f9f10943d36c4d8210e";
4041e934351Sopenharmony_ci    responseHeader["date"] = "Fri, 20 May 2022 09:37:29 GMT";
4051e934351Sopenharmony_ci
4061e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
4071e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
4081e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
4091e934351Sopenharmony_ci
4101e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
4111e934351Sopenharmony_ci}
4121e934351Sopenharmony_ci
4131e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, CompareNumber_9, testing::ext::TestSize.Level1)
4141e934351Sopenharmony_ci{
4151e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
4161e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
4171e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
4181e934351Sopenharmony_ci
4191e934351Sopenharmony_ci    HttpResponse response;
4201e934351Sopenharmony_ci    response.SetResponseCode(200);
4211e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
4221e934351Sopenharmony_ci
4231e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
4241e934351Sopenharmony_ci    responseHeader["age"] = "60";
4251e934351Sopenharmony_ci
4261e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
4271e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
4281e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
4291e934351Sopenharmony_ci
4301e934351Sopenharmony_ci    EXPECT_EQ(status, 1);
4311e934351Sopenharmony_ci}
4321e934351Sopenharmony_ci
4331e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, computeFreshnessLifetimeLastModifiedNoDateBranch, testing::ext::TestSize.Level1)
4341e934351Sopenharmony_ci{
4351e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
4361e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
4371e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
4381e934351Sopenharmony_ci
4391e934351Sopenharmony_ci    HttpResponse response;
4401e934351Sopenharmony_ci    response.SetResponseCode(200);
4411e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
4421e934351Sopenharmony_ci
4431e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
4441e934351Sopenharmony_ci    responseHeader["cache-control"] = "public";
4451e934351Sopenharmony_ci    responseHeader["last-modified"] = "Thu, 10 Feb 2022 10:55:14 GMT";
4461e934351Sopenharmony_ci
4471e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
4481e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
4491e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
4501e934351Sopenharmony_ci
4511e934351Sopenharmony_ci    EXPECT_EQ(status, 1);
4521e934351Sopenharmony_ci}
4531e934351Sopenharmony_ci
4541e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, cache110WarningBranch, testing::ext::TestSize.Level1)
4551e934351Sopenharmony_ci{
4561e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
4571e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
4581e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=60, max-stale=2000");
4591e934351Sopenharmony_ci
4601e934351Sopenharmony_ci    HttpResponse response;
4611e934351Sopenharmony_ci    response.SetResponseCode(200);
4621e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
4631e934351Sopenharmony_ci
4641e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
4651e934351Sopenharmony_ci    responseHeader["cache-control"] = "max-age=60, max-stale=500000000";
4661e934351Sopenharmony_ci    responseHeader["last-modified"] = "Thu, 10 Feb 2022 10:55:14 GMT";
4671e934351Sopenharmony_ci    responseHeader["date"] = "Fri, 20 May 2022 09:50:29 GMT";
4681e934351Sopenharmony_ci
4691e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
4701e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
4711e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
4721e934351Sopenharmony_ci
4731e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
4741e934351Sopenharmony_ci}
4751e934351Sopenharmony_ci
4761e934351Sopenharmony_ciCacheStatus switchTest(ResponseCode code)
4771e934351Sopenharmony_ci{
4781e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
4791e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
4801e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=60, max-stale=2000");
4811e934351Sopenharmony_ci
4821e934351Sopenharmony_ci    HttpResponse response;
4831e934351Sopenharmony_ci    response.SetResponseCode(static_cast<uint32_t>(code));
4841e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
4851e934351Sopenharmony_ci
4861e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
4871e934351Sopenharmony_ci    responseHeader["cache-control"] = "max-age=60, max-stale=500000000";
4881e934351Sopenharmony_ci    responseHeader["last-modified"] = "Thu, 10 Feb 2022 10:55:14 GMT";
4891e934351Sopenharmony_ci    responseHeader["date"] = "Fri, 20 May 2022 09:50:29 GMT";
4901e934351Sopenharmony_ci
4911e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
4921e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
4931e934351Sopenharmony_ci    return status;
4941e934351Sopenharmony_ci}
4951e934351Sopenharmony_ci
4961e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, cacheSwitchBranch, testing::ext::TestSize.Level1)
4971e934351Sopenharmony_ci{
4981e934351Sopenharmony_ci    CacheStatus result;
4991e934351Sopenharmony_ci    std::vector<ResponseCode> respCode = {ResponseCode::OK,           ResponseCode::NOT_AUTHORITATIVE,
5001e934351Sopenharmony_ci                                          ResponseCode::NO_CONTENT,   ResponseCode::MULT_CHOICE,
5011e934351Sopenharmony_ci                                          ResponseCode::MOVED_PERM,   ResponseCode::NOT_FOUND,
5021e934351Sopenharmony_ci                                          ResponseCode::BAD_METHOD,   ResponseCode::GONE,
5031e934351Sopenharmony_ci                                          ResponseCode::REQ_TOO_LONG, ResponseCode::NOT_IMPLEMENTED};
5041e934351Sopenharmony_ci
5051e934351Sopenharmony_ci    for (const auto &iterRespCode : respCode) {
5061e934351Sopenharmony_ci        NETSTACK_LOGI("respCode:%d", iterRespCode);
5071e934351Sopenharmony_ci    }
5081e934351Sopenharmony_ci
5091e934351Sopenharmony_ci    for (const auto &iterRespCode : respCode) {
5101e934351Sopenharmony_ci        result = switchTest(iterRespCode);
5111e934351Sopenharmony_ci        EXPECT_EQ(result, STALE);
5121e934351Sopenharmony_ci    }
5131e934351Sopenharmony_ci}
5141e934351Sopenharmony_ci
5151e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, cache113WarningBranch, testing::ext::TestSize.Level1)
5161e934351Sopenharmony_ci{
5171e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
5181e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:36:30 GMT");
5191e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=2, max-stale=9000000000");
5201e934351Sopenharmony_ci
5211e934351Sopenharmony_ci    HttpResponse response;
5221e934351Sopenharmony_ci    response.SetResponseCode(200);
5231e934351Sopenharmony_ci    response.SetResponseTime("Fri,  20 May 2022 09:36:59 GMT");
5241e934351Sopenharmony_ci
5251e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
5261e934351Sopenharmony_ci    responseHeader["cache-control"] = "max-stale=5000000000000000";
5271e934351Sopenharmony_ci    responseHeader["last-modified"] = "Sat, 04 Jun 2022 09:56:21 GMT";
5281e934351Sopenharmony_ci    responseHeader["date"] = "Mon, 20 Jun 2022 09:56:21 GMT";
5291e934351Sopenharmony_ci
5301e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
5311e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
5321e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
5331e934351Sopenharmony_ci
5341e934351Sopenharmony_ci    EXPECT_EQ(status, FRESH);
5351e934351Sopenharmony_ci}
5361e934351Sopenharmony_ci
5371e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, reqHeaderEtagBranch, testing::ext::TestSize.Level1)
5381e934351Sopenharmony_ci{
5391e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
5401e934351Sopenharmony_ci    requestOptions.SetRequestTime("Thu, 19 May 2022 08:19:59 GMT");
5411e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
5421e934351Sopenharmony_ci
5431e934351Sopenharmony_ci    HttpResponse response;
5441e934351Sopenharmony_ci    response.SetResponseCode(200);
5451e934351Sopenharmony_ci    response.SetResponseTime("Thu,  19 May 2022 08:21:59 GMT");
5461e934351Sopenharmony_ci
5471e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
5481e934351Sopenharmony_ci    responseHeader["expires"] = "Thu, 19 May 2022 08:22:26 GMT";
5491e934351Sopenharmony_ci    responseHeader["etag"] = "6f6741d197947f9f10943d36c4d8210e";
5501e934351Sopenharmony_ci
5511e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
5521e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
5531e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
5541e934351Sopenharmony_ci
5551e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
5561e934351Sopenharmony_ci}
5571e934351Sopenharmony_ci
5581e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, reqHeaderLastModifiedBranch, testing::ext::TestSize.Level1)
5591e934351Sopenharmony_ci{
5601e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
5611e934351Sopenharmony_ci    requestOptions.SetRequestTime("Thu, 19 May 2022 08:19:59 GMT");
5621e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
5631e934351Sopenharmony_ci
5641e934351Sopenharmony_ci    HttpResponse response;
5651e934351Sopenharmony_ci    response.SetResponseCode(200);
5661e934351Sopenharmony_ci    response.SetResponseTime("Thu,  19 May 2022 08:21:59 GMT");
5671e934351Sopenharmony_ci
5681e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
5691e934351Sopenharmony_ci    responseHeader["expires"] = "Thu, 19 May 2022 08:22:26 GMT";
5701e934351Sopenharmony_ci    responseHeader["last-modified"] = "Sat, 04 Jun 2022 09:56:21 GMT";
5711e934351Sopenharmony_ci
5721e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
5731e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
5741e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
5751e934351Sopenharmony_ci
5761e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
5771e934351Sopenharmony_ci}
5781e934351Sopenharmony_ci
5791e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, reqHeaderDateBranch, testing::ext::TestSize.Level1)
5801e934351Sopenharmony_ci{
5811e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
5821e934351Sopenharmony_ci    requestOptions.SetRequestTime("Thu, 19 May 2022 08:19:59 GMT");
5831e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
5841e934351Sopenharmony_ci
5851e934351Sopenharmony_ci    HttpResponse response;
5861e934351Sopenharmony_ci    response.SetResponseCode(200);
5871e934351Sopenharmony_ci    response.SetResponseTime("Thu,  19 May 2022 08:21:59 GMT");
5881e934351Sopenharmony_ci
5891e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
5901e934351Sopenharmony_ci    responseHeader["expires"] = "Thu, 19 May 2022 08:22:26 GMT";
5911e934351Sopenharmony_ci    responseHeader["date"] = "Sat, 04 Jun 2022 09:56:21 GMT";
5921e934351Sopenharmony_ci
5931e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
5941e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
5951e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
5961e934351Sopenharmony_ci
5971e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
5981e934351Sopenharmony_ci}
5991e934351Sopenharmony_ci
6001e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, headerNull, testing::ext::TestSize.Level1)
6011e934351Sopenharmony_ci{
6021e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
6031e934351Sopenharmony_ci    requestOptions.SetRequestTime("Thu, 19 May 2022 08:19:59 GMT");
6041e934351Sopenharmony_ci
6051e934351Sopenharmony_ci    HttpResponse response;
6061e934351Sopenharmony_ci    response.SetResponseCode(200);
6071e934351Sopenharmony_ci    response.SetResponseTime("Thu,  19 May 2022 08:21:59 GMT");
6081e934351Sopenharmony_ci
6091e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
6101e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
6111e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
6121e934351Sopenharmony_ci
6131e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
6141e934351Sopenharmony_ci}
6151e934351Sopenharmony_ci
6161e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, requestTimeEmpty, testing::ext::TestSize.Level1)
6171e934351Sopenharmony_ci{
6181e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
6191e934351Sopenharmony_ci
6201e934351Sopenharmony_ci    HttpResponse response;
6211e934351Sopenharmony_ci    response.SetResponseCode(200);
6221e934351Sopenharmony_ci    response.SetResponseTime("Thu,  19 May 2022 08:21:59 GMT");
6231e934351Sopenharmony_ci
6241e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
6251e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
6261e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
6271e934351Sopenharmony_ci
6281e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
6291e934351Sopenharmony_ci}
6301e934351Sopenharmony_ci
6311e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, computeFreshnessLifetimeEnd, testing::ext::TestSize.Level1)
6321e934351Sopenharmony_ci{
6331e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
6341e934351Sopenharmony_ci    requestOptions.SetRequestTime("Thu, 19 May 2022 08:19:59 GMT");
6351e934351Sopenharmony_ci
6361e934351Sopenharmony_ci    HttpResponse response;
6371e934351Sopenharmony_ci    response.SetResponseCode(200);
6381e934351Sopenharmony_ci    response.SetResponseTime("Thu,  19 May 2022 08:21:59 GMT");
6391e934351Sopenharmony_ci
6401e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
6411e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
6421e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
6431e934351Sopenharmony_ci
6441e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
6451e934351Sopenharmony_ci}
6461e934351Sopenharmony_ci
6471e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, isCacheableMovedTempIfCondition, testing::ext::TestSize.Level1)
6481e934351Sopenharmony_ci{
6491e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
6501e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:35:59 GMT");
6511e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
6521e934351Sopenharmony_ci
6531e934351Sopenharmony_ci    HttpResponse response;
6541e934351Sopenharmony_ci    response.SetResponseCode(static_cast<uint32_t>(ResponseCode::MOVED_TEMP));
6551e934351Sopenharmony_ci    response.SetResponseTime("Fri, 20 May 2022 09:36:30 GMT");
6561e934351Sopenharmony_ci
6571e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
6581e934351Sopenharmony_ci    responseHeader["cache-control"] = "private";
6591e934351Sopenharmony_ci    responseHeader["last-modified"] = "Thu, 10 Feb 2022 10:55:14 GMT";
6601e934351Sopenharmony_ci
6611e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
6621e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
6631e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
6641e934351Sopenharmony_ci
6651e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
6661e934351Sopenharmony_ci}
6671e934351Sopenharmony_ci
6681e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, computeFreshnessLifetimeDelta, testing::ext::TestSize.Level1)
6691e934351Sopenharmony_ci{
6701e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
6711e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:35:59 GMT");
6721e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
6731e934351Sopenharmony_ci
6741e934351Sopenharmony_ci    HttpResponse response;
6751e934351Sopenharmony_ci    response.SetResponseCode(200);
6761e934351Sopenharmony_ci    response.SetResponseTime("Fri, 20 May 2022 09:36:30 GMT");
6771e934351Sopenharmony_ci
6781e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
6791e934351Sopenharmony_ci    responseHeader["last-modified"] = "Mon, 18 Jul 2022 10:55:14 GMT";
6801e934351Sopenharmony_ci
6811e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
6821e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
6831e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
6841e934351Sopenharmony_ci
6851e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
6861e934351Sopenharmony_ci}
6871e934351Sopenharmony_ci
6881e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, isCacheUsefulMaxStaleMillis, testing::ext::TestSize.Level1)
6891e934351Sopenharmony_ci{
6901e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
6911e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:35:59 GMT");
6921e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "max-stale=20");
6931e934351Sopenharmony_ci
6941e934351Sopenharmony_ci    HttpResponse response;
6951e934351Sopenharmony_ci    response.SetResponseCode(200);
6961e934351Sopenharmony_ci    response.SetResponseTime("Fri, 20 May 2022 09:36:30 GMT");
6971e934351Sopenharmony_ci
6981e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
6991e934351Sopenharmony_ci    responseHeader["last-modified"] = "Thu, 10 Feb 2022 10:55:14 GMT";
7001e934351Sopenharmony_ci
7011e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
7021e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
7031e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
7041e934351Sopenharmony_ci
7051e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
7061e934351Sopenharmony_ci}
7071e934351Sopenharmony_ci
7081e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, isCacheableMovedTempIfCondition2, testing::ext::TestSize.Level1)
7091e934351Sopenharmony_ci{
7101e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
7111e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:35:59 GMT");
7121e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20, no-store");
7131e934351Sopenharmony_ci
7141e934351Sopenharmony_ci    HttpResponse response;
7151e934351Sopenharmony_ci    response.SetResponseCode(200);
7161e934351Sopenharmony_ci    response.SetResponseTime("Fri, 20 May 2022 09:36:30 GMT");
7171e934351Sopenharmony_ci
7181e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
7191e934351Sopenharmony_ci    responseHeader["cache-control"] = "private";
7201e934351Sopenharmony_ci    responseHeader["last-modified"] = "Thu, 10 Feb 2022 10:55:14 GMT";
7211e934351Sopenharmony_ci
7221e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
7231e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
7241e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
7251e934351Sopenharmony_ci
7261e934351Sopenharmony_ci    EXPECT_EQ(status, DENY);
7271e934351Sopenharmony_ci}
7281e934351Sopenharmony_ci
7291e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, isCacheableMovedTempIfCondition3, testing::ext::TestSize.Level1)
7301e934351Sopenharmony_ci{
7311e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
7321e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:35:59 GMT");
7331e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
7341e934351Sopenharmony_ci
7351e934351Sopenharmony_ci    HttpResponse response;
7361e934351Sopenharmony_ci    response.SetResponseCode(200);
7371e934351Sopenharmony_ci    response.SetResponseTime("Fri, 20 May 2022 09:36:30 GMT");
7381e934351Sopenharmony_ci
7391e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
7401e934351Sopenharmony_ci    responseHeader["cache-control"] = "private, no-store";
7411e934351Sopenharmony_ci    responseHeader["last-modified"] = "Thu, 10 Feb 2022 10:55:14 GMT";
7421e934351Sopenharmony_ci
7431e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
7441e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
7451e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
7461e934351Sopenharmony_ci
7471e934351Sopenharmony_ci    EXPECT_EQ(status, DENY);
7481e934351Sopenharmony_ci}
7491e934351Sopenharmony_ci
7501e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, isCacheableMovedTempIfCondition4, testing::ext::TestSize.Level1)
7511e934351Sopenharmony_ci{
7521e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
7531e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:35:59 GMT");
7541e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
7551e934351Sopenharmony_ci
7561e934351Sopenharmony_ci    HttpResponse response;
7571e934351Sopenharmony_ci    response.SetResponseCode(200);
7581e934351Sopenharmony_ci    response.SetResponseTime("Fri, 20 May 2022 09:36:30 GMT");
7591e934351Sopenharmony_ci
7601e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
7611e934351Sopenharmony_ci    responseHeader["cache-control"] = "private, must-revalidate";
7621e934351Sopenharmony_ci    responseHeader["last-modified"] = "Thu, 10 Feb 2022 10:55:14 GMT";
7631e934351Sopenharmony_ci
7641e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
7651e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
7661e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
7671e934351Sopenharmony_ci
7681e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
7691e934351Sopenharmony_ci}
7701e934351Sopenharmony_ci
7711e934351Sopenharmony_ciHWTEST_F(HttpCacheStrategyTest, CompareNumber_6_2, testing::ext::TestSize.Level1)
7721e934351Sopenharmony_ci{
7731e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
7741e934351Sopenharmony_ci    requestOptions.SetRequestTime("Fri, 20 May 2022 09:35:59 GMT");
7751e934351Sopenharmony_ci    requestOptions.SetHeader("cache-control", "min-fresh=20");
7761e934351Sopenharmony_ci
7771e934351Sopenharmony_ci    HttpResponse response;
7781e934351Sopenharmony_ci    response.SetResponseCode(200);
7791e934351Sopenharmony_ci    response.SetResponseTime("Fri, 20 May 2022 09:36:30 GMT");
7801e934351Sopenharmony_ci
7811e934351Sopenharmony_ci    auto &responseHeader = const_cast<std::map<std::string, std::string> &>(response.GetHeader());
7821e934351Sopenharmony_ci    responseHeader["cache-control"] = "no-cache";
7831e934351Sopenharmony_ci    responseHeader["expires"] = "Sat, 04 Jun 2022 09:56:21 GMT";
7841e934351Sopenharmony_ci    responseHeader["date"] = "Fri, 20 May 2022 09:37:29 GMT";
7851e934351Sopenharmony_ci
7861e934351Sopenharmony_ci    HttpCacheStrategy cacheStrategy(requestOptions);
7871e934351Sopenharmony_ci    CacheStatus status = cacheStrategy.RunStrategy(response);
7881e934351Sopenharmony_ci    NETSTACK_LOGI("status = %{public}d", status);
7891e934351Sopenharmony_ci
7901e934351Sopenharmony_ci    EXPECT_EQ(status, STALE);
7911e934351Sopenharmony_ci}
7921e934351Sopenharmony_ci} // namespace