mirror of https://github.com/cbeuw/Cloak
Add user bypass feature
parent
cc9aaec483
commit
76095bde0f
@ -0,0 +1,118 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
mux "github.com/cbeuw/Cloak/internal/multiplex"
|
||||
"github.com/cbeuw/Cloak/internal/server/usermanager"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestActiveUser_Bypass(t *testing.T) {
|
||||
manager, err := usermanager.MakeLocalManager(MOCK_DB_NAME)
|
||||
if err != nil {
|
||||
t.Error("failed to make local manager", err)
|
||||
}
|
||||
panel := MakeUserPanel(manager)
|
||||
UID, _ := base64.StdEncoding.DecodeString("u97xvcc5YoQA8obCyt9q/w==")
|
||||
user, _ := panel.GetBypassUser(UID)
|
||||
obfuscator := &mux.Obfuscator{
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
}
|
||||
var sesh0 *mux.Session
|
||||
var existing bool
|
||||
var sesh1 *mux.Session
|
||||
t.Run("get first session", func(t *testing.T) {
|
||||
sesh0, existing, err = user.GetSession(0, obfuscator, nil)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if existing {
|
||||
t.Error("first session returned as existing")
|
||||
}
|
||||
if sesh0 == nil {
|
||||
t.Error("no session returned")
|
||||
}
|
||||
})
|
||||
t.Run("get first session again", func(t *testing.T) {
|
||||
seshx, existing, err := user.GetSession(0, obfuscator, nil)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if !existing {
|
||||
t.Error("first session get again returned as not existing")
|
||||
}
|
||||
if seshx == nil {
|
||||
t.Error("no session returned")
|
||||
}
|
||||
if seshx != sesh0 {
|
||||
t.Error("returned a different instance")
|
||||
}
|
||||
})
|
||||
t.Run("get second session", func(t *testing.T) {
|
||||
sesh1, existing, err = user.GetSession(1, obfuscator, nil)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if existing {
|
||||
t.Error("second session returned as existing")
|
||||
}
|
||||
if sesh0 == nil {
|
||||
t.Error("no session returned")
|
||||
}
|
||||
})
|
||||
t.Run("number of sessions", func(t *testing.T) {
|
||||
if user.NumSession() != 2 {
|
||||
t.Error("number of session is not 2")
|
||||
}
|
||||
})
|
||||
t.Run("delete a session", func(t *testing.T) {
|
||||
user.DeleteSession(0, "")
|
||||
if user.NumSession() != 1 {
|
||||
t.Error("number of session is not 1 after deleting one")
|
||||
}
|
||||
if !sesh0.IsClosed() {
|
||||
t.Error("session not closed after deletion")
|
||||
}
|
||||
})
|
||||
t.Run("terminating user", func(t *testing.T) {
|
||||
user.Terminate("")
|
||||
if panel.isActive(user.arrUID[:]) {
|
||||
t.Error("user is still active after termination")
|
||||
}
|
||||
if !sesh1.IsClosed() {
|
||||
t.Error("session not closed after user termination")
|
||||
}
|
||||
})
|
||||
t.Run("get session again after termination", func(t *testing.T) {
|
||||
seshx, existing, err := user.GetSession(0, obfuscator, nil)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if existing {
|
||||
t.Error("session returned as existing")
|
||||
}
|
||||
if seshx == nil {
|
||||
t.Error("no session returned")
|
||||
}
|
||||
if seshx == sesh0 || seshx == sesh1 {
|
||||
t.Error("get session after termination returned the same instance")
|
||||
}
|
||||
})
|
||||
t.Run("delete last session", func(t *testing.T) {
|
||||
user.DeleteSession(0, "")
|
||||
if panel.isActive(user.arrUID[:]) {
|
||||
t.Error("user still active after last session deleted")
|
||||
}
|
||||
})
|
||||
err = manager.Close()
|
||||
if err != nil {
|
||||
t.Error("failed to close localmanager", err)
|
||||
}
|
||||
err = os.Remove(MOCK_DB_NAME)
|
||||
if err != nil {
|
||||
t.Error("failed to delete mockdb", err)
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"github.com/cbeuw/Cloak/internal/server/usermanager"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
const MOCK_DB_NAME = "userpanel_test_mock_database.db"
|
||||
|
||||
func TestUserPanel_BypassUser(t *testing.T) {
|
||||
manager, err := usermanager.MakeLocalManager(MOCK_DB_NAME)
|
||||
if err != nil {
|
||||
t.Error("failed to make local manager", err)
|
||||
}
|
||||
panel := MakeUserPanel(manager)
|
||||
UID, _ := base64.StdEncoding.DecodeString("u97xvcc5YoQA8obCyt9q/w==")
|
||||
user, _ := panel.GetBypassUser(UID)
|
||||
user.valve.AddRx(10)
|
||||
user.valve.AddTx(10)
|
||||
t.Run("isActive", func(t *testing.T) {
|
||||
a := panel.isActive(UID)
|
||||
if !a {
|
||||
t.Error("isActive returned ", a)
|
||||
}
|
||||
})
|
||||
t.Run("updateUsageQueue", func(t *testing.T) {
|
||||
panel.updateUsageQueue()
|
||||
if user.valve.GetRx() != 10 || user.valve.GetTx() != 10 {
|
||||
t.Error("user rx or tx info altered")
|
||||
}
|
||||
if _, inQ := panel.usageUpdateQueue[user.arrUID]; inQ {
|
||||
t.Error("user in update queue")
|
||||
}
|
||||
})
|
||||
t.Run("updateUsageQueueForOne", func(t *testing.T) {
|
||||
panel.updateUsageQueueForOne(user)
|
||||
if user.valve.GetRx() != 10 || user.valve.GetTx() != 10 {
|
||||
t.Error("user rx or tx info altered")
|
||||
}
|
||||
if _, inQ := panel.usageUpdateQueue[user.arrUID]; inQ {
|
||||
t.Error("user in update queue")
|
||||
}
|
||||
})
|
||||
t.Run("commitUpdate", func(t *testing.T) {
|
||||
err := panel.commitUpdate()
|
||||
if err != nil {
|
||||
t.Error("commit returned", err)
|
||||
}
|
||||
})
|
||||
t.Run("DeleteActiveUser", func(t *testing.T) {
|
||||
panel.DeleteActiveUser(user)
|
||||
if panel.isActive(user.arrUID[:]) {
|
||||
t.Error("user still active after deletion", err)
|
||||
}
|
||||
})
|
||||
t.Run("Repeated delete", func(t *testing.T) {
|
||||
panel.DeleteActiveUser(user)
|
||||
})
|
||||
err = manager.Close()
|
||||
if err != nil {
|
||||
t.Error("failed to close localmanager", err)
|
||||
}
|
||||
err = os.Remove(MOCK_DB_NAME)
|
||||
if err != nil {
|
||||
t.Error("failed to delete mockdb", err)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue