This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
tango-tfe/cache/test/test_cache_pending.cpp
2018-10-25 18:58:26 +08:00

212 lines
7.4 KiB
C++

#include <iostream>
#include <gtest/gtest.h>
#include <tango_cache_pending.h>
using namespace std;
int main(int argc, char **argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
TEST(CacheActionTest, PragmaField)
{
struct tfe_http_field http_heads;
struct request_freshness restrict;
struct response_freshness freshness;
http_heads.http_field = TFE_HTTP_PRAGMA;
http_heads.value = "no-cache";
EXPECT_EQ(tfe_cache_get_pending(&http_heads, 1,&restrict), REVALIDATE);
EXPECT_EQ(restrict.min_fresh, 0);
EXPECT_EQ(restrict.max_age, 0);
EXPECT_EQ(tfe_cache_put_pending(&http_heads, 1, &freshness), REVALIDATE);
EXPECT_EQ(freshness.date, 0);
EXPECT_EQ(freshness.last_modified, 0);
EXPECT_EQ(freshness.timeout, 0);
}
TEST(CacheActionTest, CacheCtlNoCache)
{
struct tfe_http_field http_heads;
struct request_freshness restrict;
struct response_freshness freshness;
http_heads.http_field = TFE_HTTP_CACHE_CONTROL;
http_heads.value = "no-cache";
EXPECT_EQ(tfe_cache_get_pending(&http_heads, 1, &restrict), REVALIDATE);
EXPECT_EQ(restrict.min_fresh, 0);
EXPECT_EQ(restrict.max_age, 0);
EXPECT_EQ(tfe_cache_put_pending(&http_heads, 1, &freshness), REVALIDATE);
EXPECT_EQ(freshness.date, 0);
EXPECT_EQ(freshness.last_modified, 0);
EXPECT_EQ(freshness.timeout, 0);
}
TEST(CacheActionTest, CacheCtlNoStore)
{
struct tfe_http_field http_heads;
struct request_freshness restrict;
struct response_freshness freshness;
http_heads.http_field = TFE_HTTP_CACHE_CONTROL;
http_heads.value = "no-store";
EXPECT_EQ(tfe_cache_get_pending(&http_heads, 1, &restrict), FORBIDDEN);
EXPECT_EQ(restrict.min_fresh, 0);
EXPECT_EQ(restrict.max_age, 0);
EXPECT_EQ(tfe_cache_put_pending(&http_heads, 1, &freshness), FORBIDDEN);
EXPECT_EQ(freshness.date, 0);
EXPECT_EQ(freshness.last_modified, 0);
EXPECT_EQ(freshness.timeout, 0);
}
TEST(CacheActionTest, CacheCtlCached)
{
struct tfe_http_field http_heads;
struct request_freshness restrict;
struct response_freshness freshness;
http_heads.http_field = TFE_HTTP_CACHE_CONTROL;
http_heads.value = "only-if-cached, max-age=3600";
EXPECT_EQ(tfe_cache_get_pending(&http_heads, 1, &restrict), ALLOWED);
EXPECT_EQ(restrict.min_fresh, 0);
EXPECT_EQ(restrict.max_age, 3600);
EXPECT_EQ(tfe_cache_put_pending(&http_heads, 1, &freshness), ALLOWED);
EXPECT_EQ(freshness.date, 0);
EXPECT_EQ(freshness.last_modified, 0);
EXPECT_EQ(freshness.timeout, 3600);
}
TEST(CacheActionTest, CacheCtlMinFresh)
{
struct tfe_http_field http_heads;
struct request_freshness restrict;
http_heads.http_field = TFE_HTTP_CACHE_CONTROL;
http_heads.value = "only-if-cached, max-age=3600, min-fresh=60";
EXPECT_EQ(tfe_cache_get_pending(&http_heads, 1, &restrict), ALLOWED);
EXPECT_EQ(restrict.min_fresh, 60);
EXPECT_EQ(restrict.max_age, 3600);
}
TEST(CacheActionTest, CacheCtlMustRevalidate)
{
struct tfe_http_field http_heads;
struct response_freshness freshness;
http_heads.http_field = TFE_HTTP_CACHE_CONTROL;
http_heads.value = "must-revalidate";
EXPECT_EQ(tfe_cache_put_pending(&http_heads, 1, &freshness), REVALIDATE);
EXPECT_EQ(freshness.date, 0);
EXPECT_EQ(freshness.last_modified, 0);
EXPECT_EQ(freshness.timeout, 0);
}
TEST(CacheActionTest, CacheCtlProxyRevalidate)
{
struct tfe_http_field http_heads;
struct response_freshness freshness;
http_heads.http_field = TFE_HTTP_CACHE_CONTROL;
http_heads.value = "proxy-revalidate";
EXPECT_EQ(tfe_cache_put_pending(&http_heads, 1, &freshness), REVALIDATE);
EXPECT_EQ(freshness.date, 0);
EXPECT_EQ(freshness.last_modified, 0);
EXPECT_EQ(freshness.timeout, 0);
}
TEST(CacheActionTest, CacheCtlCachedSMaxAge)
{
struct tfe_http_field http_heads;
struct response_freshness freshness;
http_heads.http_field = TFE_HTTP_CACHE_CONTROL;
http_heads.value = "public, max-age=60, s-maxage=3600";
EXPECT_EQ(tfe_cache_put_pending(&http_heads, 1, &freshness), ALLOWED);
EXPECT_EQ(freshness.date, 0);
EXPECT_EQ(freshness.last_modified, 0);
EXPECT_EQ(freshness.timeout, 3600);
}
TEST(CacheActionTest, CacheCtlPrivate)
{
struct tfe_http_field http_heads;
struct response_freshness freshness;
http_heads.http_field = TFE_HTTP_CACHE_CONTROL;
http_heads.value = "private";
EXPECT_EQ(tfe_cache_put_pending(&http_heads, 1, &freshness), FORBIDDEN);
EXPECT_EQ(freshness.date, 0);
EXPECT_EQ(freshness.last_modified, 0);
EXPECT_EQ(freshness.timeout, 0);
}
TEST(CacheActionTest, ExpiresResponse)
{
struct tfe_http_field http_heads;
struct response_freshness freshness;
http_heads.http_field = TFE_HTTP_EXPIRES;
http_heads.value = "Sun, 01 Dec 2019 16:00:00 GMT";
EXPECT_EQ(tfe_cache_put_pending(&http_heads, 1, &freshness), ALLOWED);
EXPECT_EQ(freshness.date, 0);
EXPECT_EQ(freshness.last_modified, 0);
cout << freshness.timeout << endl;
}
TEST(CacheActionTest, IfMatchRequest)
{
struct tfe_http_field http_heads;
struct request_freshness restrict;
http_heads.http_field = TLF_HTTP_IF_MATCH;
http_heads.value = "50b1c1d4f775c61:df3";
EXPECT_EQ(tfe_cache_get_pending(&http_heads, 1, &restrict), REVALIDATE);
EXPECT_EQ(restrict.min_fresh, 0);
EXPECT_EQ(restrict.max_age, 0);
}
TEST(CacheActionTest, IfNoMatchRequest)
{
struct tfe_http_field http_heads;
struct request_freshness restrict;
http_heads.http_field = TLF_HTTP_IF_NONE_MATCH;
http_heads.value = "50b1c1d4f775c61:df3";
EXPECT_EQ(tfe_cache_get_pending(&http_heads, 1, &restrict), REVALIDATE);
EXPECT_EQ(restrict.min_fresh, 0);
EXPECT_EQ(restrict.max_age, 0);
}
TEST(CacheActionTest, IfModifiedSinceRequest)
{
struct tfe_http_field http_heads;
struct request_freshness restrict;
http_heads.http_field = TLF_HTTP_IF_MODIFIED_SINCE;
http_heads.value = "Sun, 01 Dec 2019 16:00:00 GMT";
EXPECT_EQ(tfe_cache_get_pending(&http_heads, 1, &restrict), REVALIDATE);
EXPECT_EQ(restrict.min_fresh, 0);
EXPECT_EQ(restrict.max_age, 0);
}
TEST(CacheActionTest, IfUnModifiedSinceRequest)
{
struct tfe_http_field http_heads;
struct request_freshness restrict;
http_heads.http_field = TLF_HTTP_IF_UNMODIFIED_SINCE;
http_heads.value = "Sun, 01 Dec 2019 16:00:00 GMT";
EXPECT_EQ(tfe_cache_get_pending(&http_heads, 1, &restrict), REVALIDATE);
EXPECT_EQ(restrict.min_fresh, 0);
EXPECT_EQ(restrict.max_age, 0);
}
TEST(CacheActionTest, Date)
{
struct tfe_http_field http_heads[2];
struct response_freshness freshness;
http_heads[0].http_field=TFE_HTTP_CACHE_CONTROL;
http_heads[0].value = "public, max=3600";
http_heads[1].http_field = TFE_HTTP_DATE;
http_heads[1].value = "Sun, 01 Dec 2019 16:00:00 GMT";
EXPECT_EQ(tfe_cache_put_pending(http_heads, 2, &freshness), ALLOWED);
cout << freshness.date << endl;
EXPECT_EQ(freshness.last_modified, 0);
EXPECT_EQ(freshness.timeout, 0);
}
TEST(CacheActionTest, LastModified)
{
struct tfe_http_field http_heads[2];
struct response_freshness freshness;
http_heads[0].http_field=TFE_HTTP_CACHE_CONTROL;
http_heads[0].value = "public, max=3600";
http_heads[1].http_field = TLF_HTTP_LAST_MODIFIED;
http_heads[1].value = "Sun, 01 Dec 2019 16:00:00 GMT";
EXPECT_EQ(tfe_cache_put_pending(http_heads, 2, &freshness),ALLOWED);
cout << freshness.last_modified << endl;
EXPECT_EQ(freshness.date, 0);
EXPECT_EQ(freshness.timeout, 0);
}