Initial cloud-services repo - gateway service + pkg modules

This commit is contained in:
Chris Rai
2026-01-30 23:14:52 -05:00
commit fbb820d7b3
1037 changed files with 171318 additions and 0 deletions

View File

@@ -0,0 +1,119 @@
package threadpool
import (
"fmt"
"testing"
"time"
)
const (
NumberOfWorkers = 20
QueueSize = int64(1000)
)
var (
threadpool *ThreadPool
)
func TestNewThreadPool(t *testing.T) {
threadpool = NewThreadPool(NumberOfWorkers)
}
func TestThreadPool_Execute(t *testing.T) {
threadpool = NewThreadPool(NumberOfWorkers)
data := &TestData{Val: "pristine"}
task := &TestTask{TestData: data}
threadpool.Execute(task)
time.Sleep(2 * time.Second)
fmt.Println("")
if data.Val != "changed" {
t.Fail()
}
}
func TestThreadPool_ExecuteFuture(t *testing.T) {
threadpool = NewThreadPool(NumberOfWorkers)
task := &TestTaskFuture{}
handle, _ := threadpool.ExecuteFuture(task)
response := handle.Get()
if !handle.IsDone() {
t.Fail()
}
fmt.Println("Thread done ", response)
}
func TestThreadPool_Close(t *testing.T) {
threadpool = NewThreadPool(NumberOfWorkers)
threadpool.Close()
}
func TestQueueFullError(t *testing.T) {
threadpool = NewThreadPool(30)
before := time.Now()
data := &TestData{Val: "pristine"}
task := &TestTask{TestData: data}
for i := 0; i < 30; i++ {
err := threadpool.Execute(task)
if err != nil {
t.Fail()
}
}
threadpool.Close()
after := time.Now()
t.Logf("time start %d", after.Sub(before))
t.Log("success")
}
// func TestQueueFullError_Future(t *testing.T) {
// threadpool = NewThreadPool(NumberOfWorkers)
// threadpool := NewThreadPool(1)
// task := &TestLongTaskFuture{}
// _, err := threadpool.ExecuteFuture(task)
// if err != nil {
// t.Fail()
// }
// _, err = threadpool.ExecuteFuture(task)
// threadpool.Close()
// }
type TestTask struct {
TestData *TestData
}
type TestData struct {
Val string
}
func (t *TestTask) Run() {
time.Sleep(1 * time.Second)
t.TestData.Val = "changed"
}
type TestLongTask struct{}
func (t TestLongTask) Run() {
time.Sleep(5 * time.Second)
}
type TestTaskFuture struct{}
func (t *TestTaskFuture) Call() interface{} {
return "Done"
}
type TestLongTaskFuture struct{}
func (t *TestLongTaskFuture) Call() interface{} {
time.Sleep(5 * time.Second)
return "Done"
}