1 /*
2  * Copyright (c) Facebook, Inc. and its affiliates.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include <folly/io/async/AsyncTransport.h>
18 
19 //#include <folly/io/async/test/MockAsyncTransport.h>
20 #include <folly/portability/GTest.h>
21 
22 namespace folly {
23 
TEST(WriteFlagsTest,isSet)24 TEST(WriteFlagsTest, isSet) {
25   WriteFlags flags = WriteFlags::NONE;
26   ASSERT_FALSE(isSet(flags, WriteFlags::CORK));
27   ASSERT_FALSE(isSet(flags, WriteFlags::EOR));
28 
29   flags = WriteFlags::CORK;
30   ASSERT_TRUE(isSet(flags, WriteFlags::CORK));
31   ASSERT_FALSE(isSet(flags, WriteFlags::EOR));
32 
33   flags = static_cast<WriteFlags>(
34       static_cast<uint32_t>(WriteFlags::CORK) |
35       static_cast<uint32_t>(WriteFlags::EOR));
36   ASSERT_TRUE(isSet(flags, WriteFlags::CORK));
37   ASSERT_TRUE(isSet(flags, WriteFlags::EOR));
38 }
39 
TEST(WriteFlagsTest,unionOperator)40 TEST(WriteFlagsTest, unionOperator) {
41   WriteFlags flags = WriteFlags::CORK | WriteFlags::NONE;
42   ASSERT_EQ(flags, WriteFlags::CORK);
43 
44   flags = static_cast<WriteFlags>(
45       static_cast<uint32_t>(WriteFlags::CORK) |
46       static_cast<uint32_t>(WriteFlags::EOR));
47   ASSERT_EQ(flags, WriteFlags::CORK | WriteFlags::EOR);
48 }
49 
TEST(WriteFlagsTest,intersectionOperator)50 TEST(WriteFlagsTest, intersectionOperator) {
51   ASSERT_EQ(WriteFlags::NONE & WriteFlags::CORK, WriteFlags::NONE);
52 
53   WriteFlags flags =
54       WriteFlags::CORK | WriteFlags::EOR | WriteFlags::WRITE_SHUTDOWN;
55   ASSERT_EQ(flags & WriteFlags::CORK, WriteFlags::CORK);
56   ASSERT_EQ(flags & WriteFlags::EOR, WriteFlags::EOR);
57   ASSERT_EQ(flags & WriteFlags::WRITE_SHUTDOWN, WriteFlags::WRITE_SHUTDOWN);
58 }
59 
TEST(WriteFlagsTest,exclusionOperator)60 TEST(WriteFlagsTest, exclusionOperator) {
61   ASSERT_FALSE(isSet(~WriteFlags::CORK, WriteFlags::CORK));
62   ASSERT_TRUE(isSet(~WriteFlags::CORK, WriteFlags::EOR));
63   ASSERT_TRUE(isSet(~WriteFlags::CORK, WriteFlags::WRITE_SHUTDOWN));
64 
65   ASSERT_FALSE(isSet(~WriteFlags::EOR, WriteFlags::EOR));
66   ASSERT_TRUE(isSet(~WriteFlags::EOR, WriteFlags::CORK));
67   ASSERT_TRUE(isSet(~WriteFlags::EOR, WriteFlags::WRITE_SHUTDOWN));
68 }
69 
TEST(WriteFlagsTest,unsetOperator)70 TEST(WriteFlagsTest, unsetOperator) {
71   WriteFlags flags =
72       WriteFlags::CORK | WriteFlags::EOR | WriteFlags::WRITE_SHUTDOWN;
73   ASSERT_TRUE(isSet(flags, WriteFlags::CORK));
74   ASSERT_TRUE(isSet(flags, WriteFlags::EOR));
75   ASSERT_TRUE(isSet(flags, WriteFlags::WRITE_SHUTDOWN));
76 
77   flags = WriteFlags::CORK;
78   ASSERT_TRUE(isSet(flags, WriteFlags::CORK));
79   ASSERT_FALSE(isSet(flags, WriteFlags::EOR));
80   ASSERT_FALSE(isSet(flags, WriteFlags::WRITE_SHUTDOWN));
81 }
82 
TEST(WriteFlagsTest,compoundAssignmentUnionOperator)83 TEST(WriteFlagsTest, compoundAssignmentUnionOperator) {
84   WriteFlags flags = WriteFlags::NONE;
85   flags |= WriteFlags::CORK;
86   ASSERT_EQ(flags, WriteFlags::CORK);
87 
88   flags = WriteFlags::CORK;
89   flags |= WriteFlags::EOR;
90   ASSERT_EQ(flags, WriteFlags::CORK | WriteFlags::EOR);
91 
92   flags = WriteFlags::CORK | WriteFlags::EOR;
93   flags |= WriteFlags::CORK;
94   ASSERT_EQ(flags, WriteFlags::CORK | WriteFlags::EOR);
95 }
96 
TEST(WriteFlagsTest,compoundAssignmentIntersectionOperator)97 TEST(WriteFlagsTest, compoundAssignmentIntersectionOperator) {
98   WriteFlags flags = WriteFlags::CORK | WriteFlags::EOR;
99   flags &= WriteFlags::CORK;
100   ASSERT_EQ(flags, WriteFlags::CORK);
101 
102   flags = WriteFlags::CORK | WriteFlags::EOR;
103   flags &= WriteFlags::EOR;
104   ASSERT_EQ(flags, WriteFlags::EOR);
105 
106   flags = WriteFlags::NONE;
107   flags &= WriteFlags::EOR;
108   ASSERT_EQ(flags, WriteFlags::NONE);
109 }
110 
111 } // namespace folly
112