2 * Copyright (c) 2014 <copyright holder> <email>
4 * For license details, see the LICENSE file in the root of this project.
8 #include "GSSAcquireCredTest.h"
9 #include "GSSAcquireCred.h"
10 #include "command_mocks/MockAcquireCred.h"
11 #include <datamodel/GSSName.h>
15 CPPUNIT_TEST_SUITE_REGISTRATION( GSSAcquireCredTest );
17 OM_uint32 KRB5_CALLCONV
19 OM_uint32 *minor_status,
20 gss_name_t desired_name,
22 gss_OID_set desired_mechs,
23 gss_cred_usage_t cred_usage,
24 gss_cred_id_t * output_cred_handle,
25 gss_OID_set * actual_mechs,
29 // Set MockAcquireCred attributes from our in-parameters
30 MockAcquireCred::desired_name = desired_name;
31 MockAcquireCred::time_req = time_req;
32 MockAcquireCred::desired_mechs = desired_mechs;
33 MockAcquireCred::cred_usage = cred_usage;
35 // Set our out-parameters from MockAcquireCred
36 *output_cred_handle = MockAcquireCred::output_cred_handle;
37 *actual_mechs = MockAcquireCred::actual_mechs;
38 *time_rec = MockAcquireCred::time_rec;
40 *minor_status = MockAcquireCred::minor_status;
41 return(MockAcquireCred::retVal);
44 void GSSAcquireCredTest::setUp()
49 void GSSAcquireCredTest::tearDown()
54 void GSSAcquireCredTest::testConstructor()
57 GSSAcquireCred cmd = GSSAcquireCred();
62 CPPUNIT_ASSERT_EQUAL_MESSAGE(
63 "The GSSImportName object has the wrong GSS function",
72 void GSSAcquireCredTest::testConstructorWithJSONObject()
75 // To feed into the JSON
76 OM_uint32 time_req = rand();
77 gss_cred_usage_t cred_usage = 2;
78 GSSOID mech( (char *)"{ 1 2 840 113554 1 2 1 4 }" );
79 std::stringstream input;
83 "{\"method\" : \"gss_acquire_cred\", \
85 {\"desired_name\" : \"#################\", \
86 \"time_req\" : " << time_req << ", \
87 \"cred_usage\" : " << cred_usage << ", \
88 \"desired_mechs\": [\"" << mech.toString() << "\"] \
94 JSONObject json = JSONObject::load(input.str().c_str(), 0, &jsonErr);
96 GSSOIDSet desiredMechs;
99 GSSAcquireCred cmd = GSSAcquireCred(&json, &mock_acquire_cred);
104 CPPUNIT_ASSERT_EQUAL_MESSAGE(
105 "GSSAcquireCred's time_req was not loaded correctly",
110 CPPUNIT_ASSERT_EQUAL_MESSAGE(
111 "GSSAcquireCred's cred_usage was not loaded correctly",
116 json["arguments"].set( "cred_usage", "GSS_C_INITIATE" );
117 cmd.loadParameters(&json);
118 CPPUNIT_ASSERT_EQUAL_MESSAGE(
119 "GSSAcquireCred's cred_usage was not loaded correctly",
121 (int)cmd.getCredUsage()
124 // CPPUNIT_ASSERT_THROW(expression, exception);
125 json["arguments"].set( "cred_usage", "GSS_C_INITIATOR" );
126 CPPUNIT_ASSERT_THROW_MESSAGE(
127 "GSSAcquireCred's JSON parsing is admitting invalid strings.",
128 cmd.loadParameters(&json),
129 std::invalid_argument
132 desiredMechs = cmd.getDesiredMechs();
133 CPPUNIT_ASSERT_MESSAGE(
134 "The desired mechanisms were not set properly.",
135 desiredMechs.includes(mech)
142 void GSSAcquireCredTest::testEmptyCall()
145 GSSAcquireCred cmd = GSSAcquireCred(&mock_acquire_cred);
147 GSSName steve; // ((char *)"steve@local", (gss_OID)GSS_C_NT_USER_NAME);
148 GSSOID moonshotOID((char *)"{1 3 6 1 5 5 15 1 1 18}");
152 cmd.setDesiredName(steve);
154 cmd.addDesiredMech( moonshotOID );
155 cmd.setCredUsage(GSS_C_INITIATE);
158 MockAcquireCred::retVal = 0;
159 MockAcquireCred::minor_status = 0;
160 MockAcquireCred::output_cred_handle = GSS_C_NO_CREDENTIAL;
161 gss_create_empty_oid_set(&minor, &(MockAcquireCred::actual_mechs));
162 MockAcquireCred::time_rec = rand();
167 CPPUNIT_ASSERT_EQUAL_MESSAGE(
168 "The desired name was not passed in correctly",
170 MockAcquireCred::desired_name
173 CPPUNIT_ASSERT_EQUAL_MESSAGE(
174 "The time_req was not passed in correctly",
176 MockAcquireCred::time_req
179 CPPUNIT_ASSERT_EQUAL_MESSAGE(
180 "The desired mechs were not passed in correctly",
181 cmd.getDesiredMechs(),
182 MockAcquireCred::desired_mechs
185 CPPUNIT_ASSERT_EQUAL_MESSAGE(
186 "The cred_usage was not passed in correctly",
188 MockAcquireCred::cred_usage
191 CPPUNIT_ASSERT_EQUAL_MESSAGE(
192 "The output credential handle was not passed in correctly",
193 MockAcquireCred::output_cred_handle,
194 cmd.getOutputCredHandle()
197 CPPUNIT_ASSERT_EQUAL_MESSAGE(
198 "The actual mechanisms value was not passed in correctly",
199 MockAcquireCred::actual_mechs->count,
200 cmd.getActualMechs()->count
203 CPPUNIT_ASSERT_EQUAL_MESSAGE(
204 "The time_rec value was not passed in correctly",
205 MockAcquireCred::time_rec,
214 /* Desired JSON output:
217 * "command": "gss_acquire_cred",
221 * "cred_handle": "###########",
230 void GSSAcquireCredTest::testJSONMarshal()
233 GSSOIDSet actualMechs;
235 GSSAcquireCred cmd = GSSAcquireCred(&mock_acquire_cred);
239 actualMechs.addOID( GSSOID( (char *)"{ 1 2 3 4 }" ) );
240 actualMechs.addOID( GSSOID( (char *)"{ 1 5 6 7 8 }" ) );
241 MockAcquireCred::reset();
242 MockAcquireCred::retVal = 0;
243 MockAcquireCred::minor_status = 0;
244 MockAcquireCred::output_cred_handle = GSS_C_NO_CREDENTIAL;
245 MockAcquireCred::actual_mechs = actualMechs.toGss();
246 MockAcquireCred::time_rec = 0;
250 result = cmd.toJSON();
252 // std::cout << "\n" << result->dump() << "\n";
254 CPPUNIT_ASSERT_EQUAL_MESSAGE(
255 "The command name is incorrect",
256 std::string("gss_acquire_cred"),
257 std::string( (*result)["command"].string() )
261 CPPUNIT_ASSERT_EQUAL_MESSAGE(
262 "The return value was reported incorrectly",
263 (int)MockAcquireCred::retVal,
264 (int)( (*result)["return_values"]["major_status"].integer() )
267 CPPUNIT_ASSERT_EQUAL_MESSAGE(
268 "The minor_status value was reported incorrectly",
269 (int)MockAcquireCred::minor_status,
270 (int)( (*result)["return_values"]["minor_status"].integer() )
273 CPPUNIT_ASSERT_EQUAL_MESSAGE(
274 "The gss_name was reported incorrectly",
275 std::string("{ 1 2 3 4 }"),
276 std::string( (*result)["return_values"]["actual_mechs"][(size_t)0].string() )
279 CPPUNIT_ASSERT_EQUAL_MESSAGE(
280 "The gss_name was reported incorrectly",
281 std::string("{ 1 5 6 7 8 }"),
282 std::string( (*result)["return_values"]["actual_mechs"][(size_t)1].string() )
285 CPPUNIT_ASSERT_EQUAL_MESSAGE(
286 "The minor_status value was reported incorrectly",
287 (int)MockAcquireCred::time_rec,
288 (int)( (*result)["return_values"]["time_rec"].integer() )