blob: a83214d077205f0cea461318f7052709225690cd [file] [log] [blame]
Brian Silverman41cdd3e2019-01-19 19:48:58 -08001/*----------------------------------------------------------------------------*/
2/* Copyright (c) 2018 FIRST. All Rights Reserved. */
3/* Open Source Software - may be modified and shared by FRC teams. The code */
4/* must be accompanied by the FIRST BSD license file in the root directory of */
5/* the project. */
6/*----------------------------------------------------------------------------*/
7
8#include "wpi/HttpUtil.h" // NOLINT(build/include_order)
9
10#include "gtest/gtest.h"
11
12namespace wpi {
13
14TEST(HttpMultipartScannerTest, ExecuteExact) {
15 HttpMultipartScanner scanner("foo");
16 EXPECT_TRUE(scanner.Execute("abcdefg---\r\n--foo\r\n").empty());
17 EXPECT_TRUE(scanner.IsDone());
18 EXPECT_TRUE(scanner.GetSkipped().empty());
19}
20
21TEST(HttpMultipartScannerTest, ExecutePartial) {
22 HttpMultipartScanner scanner("foo");
23 EXPECT_TRUE(scanner.Execute("abcdefg--").empty());
24 EXPECT_FALSE(scanner.IsDone());
25 EXPECT_TRUE(scanner.Execute("-\r\n").empty());
26 EXPECT_FALSE(scanner.IsDone());
27 EXPECT_TRUE(scanner.Execute("--foo\r").empty());
28 EXPECT_FALSE(scanner.IsDone());
29 EXPECT_TRUE(scanner.Execute("\n").empty());
30 EXPECT_TRUE(scanner.IsDone());
31}
32
33TEST(HttpMultipartScannerTest, ExecuteTrailing) {
34 HttpMultipartScanner scanner("foo");
35 EXPECT_EQ(scanner.Execute("abcdefg---\r\n--foo\r\nxyz"), "xyz");
36}
37
38TEST(HttpMultipartScannerTest, ExecutePadding) {
39 HttpMultipartScanner scanner("foo");
40 EXPECT_EQ(scanner.Execute("abcdefg---\r\n--foo \r\nxyz"), "xyz");
41 EXPECT_TRUE(scanner.IsDone());
42}
43
44TEST(HttpMultipartScannerTest, SaveSkipped) {
45 HttpMultipartScanner scanner("foo", true);
46 scanner.Execute("abcdefg---\r\n--foo\r\n");
47 EXPECT_EQ(scanner.GetSkipped(), "abcdefg---\r\n--foo\r\n");
48}
49
50TEST(HttpMultipartScannerTest, Reset) {
51 HttpMultipartScanner scanner("foo", true);
52
53 scanner.Execute("abcdefg---\r\n--foo\r\n");
54 EXPECT_TRUE(scanner.IsDone());
55 EXPECT_EQ(scanner.GetSkipped(), "abcdefg---\r\n--foo\r\n");
56
57 scanner.Reset(true);
58 EXPECT_FALSE(scanner.IsDone());
59 scanner.SetBoundary("bar");
60
61 scanner.Execute("--foo\r\n--bar\r\n");
62 EXPECT_TRUE(scanner.IsDone());
63 EXPECT_EQ(scanner.GetSkipped(), "--foo\r\n--bar\r\n");
64}
65
66TEST(HttpMultipartScannerTest, WithoutDashes) {
67 HttpMultipartScanner scanner("foo", true);
68
69 EXPECT_TRUE(scanner.Execute("--\r\nfoo\r\n").empty());
70 EXPECT_TRUE(scanner.IsDone());
71}
72
73TEST(HttpMultipartScannerTest, SeqDashesDashes) {
74 HttpMultipartScanner scanner("foo", true);
75 EXPECT_TRUE(scanner.Execute("\r\n--foo\r\n").empty());
76 EXPECT_TRUE(scanner.IsDone());
77 EXPECT_TRUE(scanner.Execute("\r\n--foo\r\n").empty());
78 EXPECT_TRUE(scanner.IsDone());
79}
80
81TEST(HttpMultipartScannerTest, SeqDashesNoDashes) {
82 HttpMultipartScanner scanner("foo", true);
83 EXPECT_TRUE(scanner.Execute("\r\n--foo\r\n").empty());
84 EXPECT_TRUE(scanner.IsDone());
85 EXPECT_TRUE(scanner.Execute("\r\nfoo\r\n").empty());
86 EXPECT_FALSE(scanner.IsDone());
87}
88
89TEST(HttpMultipartScannerTest, SeqNoDashesDashes) {
90 HttpMultipartScanner scanner("foo", true);
91 EXPECT_TRUE(scanner.Execute("\r\nfoo\r\n").empty());
92 EXPECT_TRUE(scanner.IsDone());
93 EXPECT_TRUE(scanner.Execute("\r\n--foo\r\n").empty());
94 EXPECT_FALSE(scanner.IsDone());
95}
96
97TEST(HttpMultipartScannerTest, SeqNoDashesNoDashes) {
98 HttpMultipartScanner scanner("foo", true);
99 EXPECT_TRUE(scanner.Execute("\r\nfoo\r\n").empty());
100 EXPECT_TRUE(scanner.IsDone());
101 EXPECT_TRUE(scanner.Execute("\r\nfoo\r\n").empty());
102 EXPECT_TRUE(scanner.IsDone());
103}
104
105} // namespace wpi