File: session-factory.cpp

package info (click to toggle)
davix 0.8.10-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 37,184 kB
  • sloc: ansic: 164,612; cpp: 38,741; python: 17,726; perl: 14,124; sh: 13,458; xml: 3,567; makefile: 1,959; javascript: 885; pascal: 570; lisp: 7
file content (112 lines) | stat: -rw-r--r-- 4,411 bytes parent folder | download | duplicates (2)
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
#include <gtest/gtest.h>
#include <davix.hpp>
#include <neon/neonsessionfactory.hpp>
#include <core/RedirectionResolver.hpp>

using namespace Davix;

TEST(testRedirectCache, testCacheSimple) {
    davix_set_log_level(DAVIX_LOG_ALL);

    std::shared_ptr<Uri> dest(new Uri("https://sffsdfsd.com/dsffds/fsdfsdsdf"));
    std::shared_ptr<Uri> dest2(new Uri("https://sffsdfsd.com/dsffds/fsdfsdsdf"));
    Uri u("http://higgs.boson/is/watchingus");

    Uri u_sec("https://higgs.boson/is/watchingus");
    Uri u_port("https://higgs.boson:8668/is/watchingus");

    RedirectionResolver f(true);
    f.addRedirection("GET", u, dest);
    ASSERT_TRUE(f.redirectionResolve("GET", u) == dest);
    ASSERT_TRUE(f.redirectionResolve("GET", u_sec).get() == NULL);
    ASSERT_TRUE(f.redirectionResolve("GET", u_port).get() == NULL);

    // add redirection
    f.addRedirection("GET", u_port, dest2);
    ASSERT_TRUE(f.redirectionResolve("GET", u) != dest2);
    ASSERT_TRUE(f.redirectionResolve("GET", u_port) == dest2);

    // remove redirection
    f.redirectionClean("GET", u);
    ASSERT_TRUE(f.redirectionResolve("GET", u).get() == NULL);
    ASSERT_TRUE(f.redirectionResolve("GET", u_port) == dest2);
}

TEST(testRedirectCache, testCacheChainRedirection) {
    davix_set_log_level(DAVIX_LOG_ALL);

    Uri u("http://higgs.boson/is/watchingus");
    std::shared_ptr<Uri> url1(new Uri("https://sffsdfsd.com/dsffds/fsdfsdsdf"));
    std::shared_ptr<Uri> url2(new Uri("https://server2.com/dsffds/sfdfdsfsdfdsfdsfds"));
    std::shared_ptr<Uri> url3(new Uri("https://server2.com:8080/dsffds/sfdfdsfsdfdsfdsfds"));
    std::shared_ptr<Uri> url4(new Uri("https://server3.com/dsffds/fsdaaaaa"));

    RedirectionResolver f(true);
    f.addRedirection("GET", u, url1);
    f.addRedirection("GET",*url1, url2);
    f.addRedirection("GET", *url2, url3);
    f.addRedirection("GET", *url3, url4);

    ASSERT_TRUE(f.redirectionResolve("GET", u) == url4);

    ASSERT_TRUE(f.redirectionResolve("GET", *url2) == url4);
    f.redirectionClean("GET", u);
    ASSERT_TRUE(f.redirectionResolve("GET", u).get() == NULL);
    ASSERT_TRUE(f.redirectionResolve("GET", *url2).get() == NULL);
    ASSERT_TRUE(f.redirectionResolve("GET", *url4).get() == NULL);
}

TEST(testRedirectCache, test_GET_HEAD) {
    davix_set_log_level(DAVIX_LOG_ALL);

    Uri u("https://higgs.boson/is/watchingus");
    std::shared_ptr<Uri> url1(new Uri("https://sffsdfsd.com/dsffds/fsdfsdsdf"));
    std::shared_ptr<Uri> url2(new Uri("https://server2.com/dsffds/sfdfdsfsdfdsfdsfds"));

    RedirectionResolver f(true);
    f.addRedirection("GET", u, url1);

    ASSERT_TRUE(f.redirectionResolve("GET", u) == url1);
    ASSERT_TRUE(f.redirectionResolve("HEAD", u) == url1);
    ASSERT_TRUE(f.redirectionResolve("PUT", u).get() == NULL);
    f.redirectionClean("GET", u);

    ASSERT_TRUE(f.redirectionResolve("GET", u) == NULL);
    ASSERT_TRUE(f.redirectionResolve("HEAD", u) == NULL);
    f.addRedirection("PUT", u, url1);
    ASSERT_TRUE(f.redirectionResolve("GET", u).get() == NULL);
    ASSERT_TRUE(f.redirectionResolve("PUT", u) == url1);

    f.addRedirection("HEAD", u, url1);

    ASSERT_TRUE(f.redirectionResolve("GET", u) == url1);
    ASSERT_TRUE(f.redirectionResolve("HEAD", u) == url1);
}

TEST(testRedirectCache, noRedirectLoop) {
    davix_set_log_level(DAVIX_LOG_ALL);

    std::shared_ptr<Uri> start(new Uri("https://redirection.start/file"));
    std::shared_ptr<Uri> middle(new Uri("https://redirection.middle/file"));
    std::shared_ptr<Uri> end(new Uri("https://redirection.end/loop"));

    RedirectionResolver f(true);
    f.addRedirection("GET", *start, middle);
    f.addRedirection("GET", *middle, start);
    ASSERT_TRUE(*(f.redirectionResolve("GET", *start)) == *middle);
    ASSERT_TRUE(*(f.redirectionResolve("GET", *middle)) == *start);

    // Cleaning one item from a loop deletes the full loop
    f.redirectionClean("GET", *middle);
    ASSERT_TRUE(f.redirectionResolve("GET", *start) == NULL);

    f.addRedirection("GET", *start, middle);
    f.addRedirection("GET", *middle, end);
    f.addRedirection("GET", *end, start);
    ASSERT_TRUE(*(f.redirectionResolve("GET", *start)) == *end);
    ASSERT_TRUE(*(f.redirectionResolve("GET", *middle)) == *start);
    ASSERT_TRUE(*(f.redirectionResolve("GET", *end)) == *middle);

    f.redirectionClean("GET", *end);
    ASSERT_TRUE(f.redirectionResolve("GET", *start) == NULL);
}