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  }