@@ -61,6 +61,85 @@ testAllFlags()
6161 LDClientClose (client );
6262}
6363
64+ /* If there is a problem with a single flag, then that should not prevent returning other flags.
65+ * In this test one of the flags will have an invalid fallthrough that contains neither a variation
66+ * nor rollout.
67+ */
68+ static void
69+ testAllFlagsWithFlagWithFallthroughWithNoVariationAndNoRollout ()
70+ {
71+ struct LDJSON * flag1 , * flag2 , * allFlags ;
72+ struct LDClient * client ;
73+ struct LDUser * user ;
74+
75+ LD_ASSERT (client = makeTestClient ());
76+ LD_ASSERT (user = LDUserNew ("userkey" ));
77+
78+ /* flag1 */
79+ LD_ASSERT (flag1 = LDNewObject ());
80+ LD_ASSERT (LDObjectSetKey (flag1 , "key" , LDNewText ("flag1" )));
81+ LD_ASSERT (LDObjectSetKey (flag1 , "version" , LDNewNumber (1 )));
82+ LD_ASSERT (LDObjectSetKey (flag1 , "on" , LDNewBool (LDBooleanTrue )));
83+ LD_ASSERT (LDObjectSetKey (flag1 , "salt" , LDNewText ("abc" )));
84+ setFallthrough (flag1 , 1 );
85+ addVariation (flag1 , LDNewText ("a" ));
86+ addVariation (flag1 , LDNewText ("b" ));
87+
88+ /* flag2 */
89+ LD_ASSERT (flag2 = LDNewObject ());
90+ LD_ASSERT (LDObjectSetKey (flag2 , "key" , LDNewText ("flag2" )));
91+ LD_ASSERT (LDObjectSetKey (flag2 , "version" , LDNewNumber (1 )));
92+ LD_ASSERT (LDObjectSetKey (flag2 , "on" , LDNewBool (LDBooleanTrue )));
93+ LD_ASSERT (LDObjectSetKey (flag2 , "salt" , LDNewText ("abc" )));
94+
95+ /* Set a fallthrough which has no variation or rollout. */
96+ struct LDJSON * fallthrough ;
97+ LD_ASSERT (fallthrough = LDNewObject ());
98+ LD_ASSERT (LDObjectSetKey (flag2 , "fallthrough" , fallthrough ));
99+
100+ /* store */
101+ LD_ASSERT (LDStoreInitEmpty (client -> store ));
102+ LD_ASSERT (LDStoreUpsert (client -> store , LD_FLAG , flag1 ));
103+ LD_ASSERT (LDStoreUpsert (client -> store , LD_FLAG , flag2 ));
104+
105+ /* test */
106+ LD_ASSERT (allFlags = LDAllFlags (client , user ));
107+
108+ /* validation */
109+ LD_ASSERT (LDCollectionGetSize (allFlags ) == 1 );
110+ LD_ASSERT (strcmp (LDGetText (LDObjectLookup (allFlags , "flag1" )), "b" ) == 0 );
111+
112+ /* cleanup */
113+ LDJSONFree (allFlags );
114+ LDUserFree (user );
115+ LDClientClose (client );
116+ }
117+
118+ static void
119+ testAllFlagsNoFlagsInStore ()
120+ {
121+ struct LDJSON * flag1 , * flag2 , * allFlags ;
122+ struct LDClient * client ;
123+ struct LDUser * user ;
124+
125+ LD_ASSERT (client = makeTestClient ());
126+ LD_ASSERT (user = LDUserNew ("userkey" ));
127+
128+ /* store */
129+ LD_ASSERT (LDStoreInitEmpty (client -> store ));
130+
131+ /* test */
132+ LD_ASSERT (allFlags = LDAllFlags (client , user ));
133+
134+ /* validation */
135+ LD_ASSERT (LDCollectionGetSize (allFlags ) == 0 );
136+
137+ /* cleanup */
138+ LDJSONFree (allFlags );
139+ LDUserFree (user );
140+ LDClientClose (client );
141+ }
142+
64143int
65144main ()
66145{
@@ -69,6 +148,8 @@ main()
69148 LDGlobalInit ();
70149
71150 testAllFlags ();
151+ testAllFlagsWithFlagWithFallthroughWithNoVariationAndNoRollout ();
152+ testAllFlagsNoFlagsInStore ();
72153
73154 LDBasicLoggerThreadSafeShutdown ();
74155
0 commit comments