github.com/Laplace-Game-Development/Laplace-Entangled-Environment@v0.0.3/internal/route/signature_test.go (about) 1 package route 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/Laplace-Game-Development/Laplace-Entangled-Environment/internal/data" 8 "github.com/Laplace-Game-Development/Laplace-Entangled-Environment/internal/policy" 9 "github.com/Laplace-Game-Development/Laplace-Entangled-Environment/internal/redis" 10 "github.com/Laplace-Game-Development/Laplace-Entangled-Environment/internal/startup" 11 "github.com/Laplace-Game-Development/Laplace-Entangled-Environment/internal/util" 12 ) 13 14 const testUserNamePrefix = "DERPDERPSIG" 15 16 func TestSigVerify(t *testing.T) { 17 cleanup := startup.InitServerStartupOnTaskList( 18 []startup.ServerTask{ 19 redis.StartDatabase, 20 data.StartUsers, 21 }) 22 defer cleanup() 23 24 username := testUserNamePrefix + "VERIFY" 25 password := "SomeP@ssword123" 26 27 // Register User 28 regBody := data.RegisterCommandBody{Username: username, Password: password} 29 req, err := policy.RequestWithUserForTesting("", false, policy.CmdRegister, regBody) 30 if err != nil { 31 t.Errorf("Failure to create Request! Err: %v\n", err) 32 } 33 34 response := data.Register(req.Header, req.BodyFactories, req.IsSecureConnection) 35 if response.ServerError != nil { 36 t.Errorf("Failure to Register user! Err: %v\n", err) 37 } 38 39 // Login User 40 loginBody := data.LoginCommandBody{Username: username, Password: password} 41 req, err = policy.RequestWithUserForTesting("", false, policy.CmdLogin, loginBody) 42 if err != nil { 43 t.Errorf("Failure to create Request! Err: %v\n", err) 44 } 45 46 response = data.Login(req.Header, req.BodyFactories, req.IsSecureConnection) 47 if response.ServerError != nil { 48 t.Errorf("Failure to Login user! Err: %v\n", err) 49 } 50 51 token, err := util.Base64Decode(&response.Raw) 52 if err != nil { 53 t.Errorf("Base64 Did Not Decode Correctly! Err: %v\n", err) 54 } 55 t.Logf("Token Received: %X\n", token) 56 counter := 0 57 58 // Get User ID 59 getUserBody := data.GetUserCommandBody{Username: username} 60 req, err = policy.RequestWithUserForTesting("", false, policy.CmdGetUser, getUserBody) 61 if err != nil { 62 t.Errorf("Failure to create Request! Err: %v\n", err) 63 } 64 65 response = data.GetUser(req.Header, req.BodyFactories, req.IsSecureConnection) 66 if response.ServerError != nil { 67 t.Errorf("Failure to Get user! Err: %v\n", err) 68 } 69 70 var authResponse data.UserInfo 71 bytes, err := response.Digest(response.Data) 72 if err != nil { 73 t.Errorf("Error Digesting Response! Err: %v\n", err) 74 } 75 err = json.Unmarshal(bytes, &authResponse) 76 if err != nil { 77 t.Errorf("Error Unmarshalling Response! Err: %v\n", err) 78 } 79 80 // Test Verification 81 content := "derp1234!@#$" 82 contentByte := []byte(content) 83 signature := TestHelperGenSig(&token, content, counter) 84 // Remember, each success increments counter! 85 err = SigVerification(authResponse.AuthID, signature, &contentByte) 86 if err != nil { 87 t.Errorf("Error Verifying Signature! Err: %v\n", err) 88 } 89 90 counter += 1 91 92 signature = TestHelperGenSig(&token, content, counter) 93 err = SigVerification(authResponse.AuthID, signature, &contentByte) 94 if err != nil { 95 t.Errorf("Error Verifying Signature! Err: %v\n", err) 96 } 97 98 counter += 1 99 100 signature = TestHelperGenSig(&token, content, counter) 101 err = SigVerification(authResponse.AuthID, signature, &contentByte) 102 if err != nil { 103 t.Errorf("Error Verifying Signature! Err: %v\n", err) 104 } 105 106 counter += 1 107 108 signature = TestHelperGenSig(&token, content, counter) 109 err = SigVerification(authResponse.AuthID, signature, &contentByte) 110 if err != nil { 111 t.Errorf("Error Verifying Signature! Err: %v\n", err) 112 } 113 114 // Bad Signature Results in Error 115 signature = TestHelperGenSig(&token, content, counter) 116 err = SigVerification(authResponse.AuthID, signature, &contentByte) 117 if err == nil { 118 t.Errorf("No Error In Verifying Bad Signature!") 119 } 120 121 empty := []byte{} 122 err = SigVerification(authResponse.AuthID, "", &empty) 123 if err == nil { 124 t.Errorf("No Error In Verifying Bad Signature!") 125 } 126 127 // Delete the user 128 success, err := data.DeleteUser(username) 129 if err != nil { 130 t.Errorf("Failure to delete user! Err: %v\n", err) 131 } else if !success { 132 t.Errorf("User did not exist upon deletion!\n") 133 } 134 }