Skip to content

Commit 84f97bb

Browse files
author
Tyler J
committed
Add tests in core for success and failure of the AnyUser parameter
core: Add unit tests scenarios core: Check for a non-nil, but empty, Users list
1 parent 1fa82b8 commit 84f97bb

File tree

2 files changed

+277
-1
lines changed

2 files changed

+277
-1
lines changed

core/core.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ func Delegate(jsonIn []byte) ([]byte, error) {
384384
}
385385

386386
// Ensure a list of Users is given or the AnyUser flag is set
387-
if s.Users == nil && s.AnyUser == false {
387+
if (s.Users == nil || len(s.Users) == 0) && s.AnyUser == false {
388388
err = errors.New("Must provide a list of Users or set the AnyUser flag to true")
389389
return jsonStatusError(err)
390390
}

core/core_test.go

Lines changed: 276 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1131,3 +1131,279 @@ func TestValidateName(t *testing.T) {
11311131
t.Fatalf("No error expected when username and password provided, %v", err)
11321132
}
11331133
}
1134+
1135+
func TestAnyUserDelegation(t *testing.T) {
1136+
aliceJson := []byte("{\"Name\":\"Alice\",\"Password\":\"Hello\"}")
1137+
bobJson := []byte("{\"Name\":\"Bob\",\"Password\":\"Bonjour\"}")
1138+
carolJson := []byte("{\"Name\":\"Carol\",\"Password\":\"Hola\"}")
1139+
encryptJson := []byte("{\"Name\":\"Bob\",\"Password\":\"Bonjour\",\"Minimum\":1,\"Owners\":[\"Alice\",\"Bob\",\"Carol\"],\"Data\":\"SGVsbG8gSmVsbG8=\"}")
1140+
encryptJson2 := []byte("{\"Name\":\"Bob\",\"Password\":\"Bonjour\",\"Minimum\":2,\"Owners\":[\"Alice\",\"Bob\",\"Carol\"],\"Data\":\"SGVsbG8gSmVsbG8=\"}")
1141+
delegateJson := []byte("{\"Name\":\"Bob\",\"Password\":\"Bonjour\",\"Time\":\"10s\",\"Uses\":1}")
1142+
delegateJson2 := []byte("{\"Name\":\"Bob\",\"Password\":\"Bonjour\",\"Time\":\"10s\",\"Uses\":1,\"AnyUser\":false}")
1143+
delegateJson3 := []byte("{\"Name\":\"Bob\",\"Password\":\"Bonjour\",\"Time\":\"10s\",\"Uses\":1,\"Users\":[]}")
1144+
delegateJson4 := []byte("{\"Name\":\"Alice\",\"Password\":\"Hello\",\"Time\":\"10s\",\"Uses\":1,\"AnyUser\":true}")
1145+
delegateJson5 := []byte("{\"Name\":\"Bob\",\"Password\":\"Bonjour\",\"Time\":\"10s\",\"Uses\":2,\"AnyUser\":true}")
1146+
delegateJson6 := []byte("{\"Name\":\"Carol\",\"Password\":\"Hola\",\"Time\":\"10s\",\"Uses\":1,\"Users\":[\"Alice\"]}")
1147+
delegateJson7 := []byte("{\"Name\":\"Carol\",\"Password\":\"Hola\",\"Time\":\"10s\",\"Uses\":1,\"Users\":[\"Bob\"]}")
1148+
1149+
Init("memory", "", "", "", "")
1150+
1151+
// Create a new vault with an initial user
1152+
var s ResponseData
1153+
respJson, err := Create(aliceJson)
1154+
if err != nil {
1155+
t.Fatalf("Error in creating account, %v", err)
1156+
}
1157+
err = json.Unmarshal(respJson, &s)
1158+
if err != nil {
1159+
t.Fatalf("Error in creating account, %v", err)
1160+
}
1161+
if s.Status != "ok" {
1162+
t.Fatalf("Error in creating account, %v", s.Status)
1163+
}
1164+
1165+
// Create new users
1166+
respJson, err = CreateUser(bobJson)
1167+
if err != nil {
1168+
t.Fatalf("Error in creating account, %v", err)
1169+
}
1170+
err = json.Unmarshal(respJson, &s)
1171+
if err != nil {
1172+
t.Fatalf("Error in creating account, %v", err)
1173+
}
1174+
if s.Status != "ok" {
1175+
t.Fatalf("Error in creating account, %v", s.Status)
1176+
}
1177+
1178+
respJson, err = CreateUser(carolJson)
1179+
if err != nil {
1180+
t.Fatalf("Error in creating account, %v", err)
1181+
}
1182+
err = json.Unmarshal(respJson, &s)
1183+
if err != nil {
1184+
t.Fatalf("Error in creating account, %v", err)
1185+
}
1186+
if s.Status != "ok" {
1187+
t.Fatalf("Error in creating account, %v", s.Status)
1188+
}
1189+
1190+
// Encrypt some test data
1191+
respJson, err = Encrypt(encryptJson)
1192+
if err != nil {
1193+
t.Fatalf("Error in encrypt, %v", err)
1194+
}
1195+
err = json.Unmarshal(respJson, &s)
1196+
if err != nil {
1197+
t.Fatalf("Error in encrypt, %v", err)
1198+
}
1199+
if s.Status != "ok" {
1200+
t.Fatalf("Error in encrypt, %v", s.Status)
1201+
}
1202+
1203+
// Create a decryption request for later
1204+
decryptJson, err := json.Marshal(DecryptRequest{Name: "Alice", Password: "Hello", Data: s.Response})
1205+
if err != nil {
1206+
t.Fatalf("Error in marshalling decryption, %v", err)
1207+
}
1208+
1209+
// Test that delegation without specifying a user fails (under multiple scenarios)
1210+
for _, delJson := range [][]byte{delegateJson, delegateJson2, delegateJson3} {
1211+
respJson, err = Delegate(delJson)
1212+
if err != nil {
1213+
t.Fatalf("Error in delegate, %v", err)
1214+
}
1215+
err = json.Unmarshal(respJson, &s)
1216+
if err != nil {
1217+
t.Fatalf("Error in delegate, %v", err)
1218+
}
1219+
if s.Status == "ok" {
1220+
t.Fatalf("Error expected when no user is provided")
1221+
}
1222+
}
1223+
1224+
// Test that we can delegate to any user
1225+
respJson, err = Delegate(delegateJson4)
1226+
if err != nil {
1227+
t.Fatalf("Error in delegate, %v", err)
1228+
}
1229+
err = json.Unmarshal(respJson, &s)
1230+
if err != nil {
1231+
t.Fatalf("Error in delegate, %v", err)
1232+
}
1233+
if s.Status != "ok" {
1234+
t.Fatalf("Error in delegate, %v", s.Status)
1235+
}
1236+
1237+
// Verify the presence of a single delegation
1238+
cache.Refresh()
1239+
var sum SummaryData
1240+
respJson, err = Summary(aliceJson)
1241+
if err != nil {
1242+
t.Fatalf("Error in summary, %v", err)
1243+
}
1244+
err = json.Unmarshal(respJson, &sum)
1245+
if err != nil {
1246+
t.Fatalf("Error in summary, %v", err)
1247+
}
1248+
if sum.Status != "ok" {
1249+
t.Fatalf("Error in summary, %v", sum.Status)
1250+
}
1251+
if len(sum.Live) != 1 {
1252+
t.Fatalf("Error in summary, %v", sum.Live)
1253+
}
1254+
1255+
// Test that we can decrypt the data
1256+
respJson, err = Decrypt(decryptJson)
1257+
if err != nil {
1258+
t.Fatalf("Error in decrypt, %v", err)
1259+
}
1260+
err = json.Unmarshal(respJson, &s)
1261+
if err != nil {
1262+
t.Fatalf("Error in decrypt, %v", err)
1263+
}
1264+
if s.Status != "ok" {
1265+
t.Fatalf("Error in decrypt, %v", s.Status)
1266+
}
1267+
1268+
// Verify that no delegations exist after decryption
1269+
cache.Refresh()
1270+
var sum2 SummaryData
1271+
respJson, err = Summary(aliceJson)
1272+
if err != nil {
1273+
t.Fatalf("Error in summary, %v", err)
1274+
}
1275+
err = json.Unmarshal(respJson, &sum2)
1276+
if err != nil {
1277+
t.Fatalf("Error in summary, %v", err)
1278+
}
1279+
if sum2.Status != "ok" {
1280+
t.Fatalf("Error in summary, %v", sum2.Status)
1281+
}
1282+
if len(sum2.Live) != 0 {
1283+
t.Fatalf("Error in summary, %#v", sum2.Live)
1284+
}
1285+
1286+
// Encrypt some data that requires 2 owners to delegate
1287+
respJson, err = Encrypt(encryptJson2)
1288+
if err != nil {
1289+
t.Fatalf("Error in encrypt, %v", err)
1290+
}
1291+
err = json.Unmarshal(respJson, &s)
1292+
if err != nil {
1293+
t.Fatalf("Error in encrypt, %v", err)
1294+
}
1295+
if s.Status != "ok" {
1296+
t.Fatalf("Error in encrypt, %v", s.Status)
1297+
}
1298+
1299+
// Create decryption requests for later
1300+
decryptJson2, err := json.Marshal(DecryptRequest{Name: "Alice", Password: "Hello", Data: s.Response})
1301+
if err != nil {
1302+
t.Fatalf("Error in marshalling decryption, %v", err)
1303+
}
1304+
decryptJson3, err := json.Marshal(DecryptRequest{Name: "Bob", Password: "Bonjour", Data: s.Response})
1305+
if err != nil {
1306+
t.Fatalf("Error in marshalling decryption, %v", err)
1307+
}
1308+
1309+
// Test that we can delegate to any user, with 2 uses
1310+
respJson, err = Delegate(delegateJson5)
1311+
if err != nil {
1312+
t.Fatalf("Error in delegate, %v", err)
1313+
}
1314+
err = json.Unmarshal(respJson, &s)
1315+
if err != nil {
1316+
t.Fatalf("Error in delegate, %v", err)
1317+
}
1318+
if s.Status != "ok" {
1319+
t.Fatalf("Error in delegate, %v", s.Status)
1320+
}
1321+
1322+
// Test that we can delegate to a specific user, with 1 use
1323+
respJson, err = Delegate(delegateJson6)
1324+
if err != nil {
1325+
t.Fatalf("Error in delegate, %v", err)
1326+
}
1327+
err = json.Unmarshal(respJson, &s)
1328+
if err != nil {
1329+
t.Fatalf("Error in delegate, %v", err)
1330+
}
1331+
if s.Status != "ok" {
1332+
t.Fatalf("Error in delegate, %v", s.Status)
1333+
}
1334+
1335+
// Verify the presence of the 2 delegations
1336+
cache.Refresh()
1337+
var sum3 SummaryData
1338+
respJson, err = Summary(aliceJson)
1339+
if err != nil {
1340+
t.Fatalf("Error in summary, %v", err)
1341+
}
1342+
err = json.Unmarshal(respJson, &sum3)
1343+
if err != nil {
1344+
t.Fatalf("Error in summary, %v", err)
1345+
}
1346+
if sum3.Status != "ok" {
1347+
t.Fatalf("Error in summary, %v", sum3.Status)
1348+
}
1349+
if len(sum3.Live) != 2 {
1350+
t.Fatalf("Error in summary, %v", sum3.Live)
1351+
}
1352+
1353+
// Test that we can decrypt the data for one request
1354+
respJson, err = Decrypt(decryptJson2)
1355+
if err != nil {
1356+
t.Fatalf("Error in decrypt, %v", err)
1357+
}
1358+
err = json.Unmarshal(respJson, &s)
1359+
if err != nil {
1360+
t.Fatalf("Error in decrypt, %v", err)
1361+
}
1362+
if s.Status != "ok" {
1363+
t.Fatalf("Error in decrypt, %v", s.Status)
1364+
}
1365+
1366+
// Test that we can delegate to another specific user, with 1 use
1367+
respJson, err = Delegate(delegateJson7)
1368+
if err != nil {
1369+
t.Fatalf("Error in delegate, %v", err)
1370+
}
1371+
err = json.Unmarshal(respJson, &s)
1372+
if err != nil {
1373+
t.Fatalf("Error in delegate, %v", err)
1374+
}
1375+
if s.Status != "ok" {
1376+
t.Fatalf("Error in delegate, %v", s.Status)
1377+
}
1378+
1379+
// Test that we can decrypt a request, using the new user's delegation and the remaining any-user delegation
1380+
respJson, err = Decrypt(decryptJson3)
1381+
if err != nil {
1382+
t.Fatalf("Error in decrypt, %v", err)
1383+
}
1384+
err = json.Unmarshal(respJson, &s)
1385+
if err != nil {
1386+
t.Fatalf("Error in decrypt, %v", err)
1387+
}
1388+
if s.Status != "ok" {
1389+
t.Fatalf("Error in decrypt, %v", s.Status)
1390+
}
1391+
1392+
// Verify that no delegations exist after decryption
1393+
cache.Refresh()
1394+
var sum4 SummaryData
1395+
respJson, err = Summary(aliceJson)
1396+
if err != nil {
1397+
t.Fatalf("Error in summary, %v", err)
1398+
}
1399+
err = json.Unmarshal(respJson, &sum4)
1400+
if err != nil {
1401+
t.Fatalf("Error in summary, %v", err)
1402+
}
1403+
if sum4.Status != "ok" {
1404+
t.Fatalf("Error in summary, %v", sum4.Status)
1405+
}
1406+
if len(sum4.Live) != 0 {
1407+
t.Fatalf("Error in summary, %#v", sum4.Live)
1408+
}
1409+
}

0 commit comments

Comments
 (0)