Files
ARTEX-chixuweihu/agent/task_asset_sharing_test.go
T

77 lines
2.4 KiB
Go

package agent
import (
"encoding/json"
"fmt"
"strings"
"testing"
"github.com/Autumn-27/artex/db"
)
func TestTaskAssetSharingLiveToolPolicy(t *testing.T) {
d := testDB(t)
defer d.Close()
task, err := d.CreateTask("tool sharing", "goal", nil, 0, 0)
if err != nil {
t.Fatal(err)
}
defer d.DeleteTask(task.ID)
assets := d.Assets()
company, _, err := d.Companies().UpsertCompany(fmt.Sprintf("sharing-tool-%d", task.ID), "")
if err != nil {
t.Fatal(err)
}
defer d.Companies().DeleteCompany(company)
foreign, err := assets.UpsertRootDomain(db.UpsertRootDomainReq{Domain: fmt.Sprintf("sharing-tool-%d.invalid", task.ID)})
if err != nil {
t.Fatal(err)
}
defer assets.DeleteByIDs([]int64{foreign})
if _, err = d.Exec(`UPDATE assets SET company_id=$2 WHERE id=$1`, foreign, company); err != nil {
t.Fatal(err)
}
tools := NewToolSet(d.Exploration(task.ExplorationID), "planner")
tools.SetTaskID(task.ID)
tools.SetAssetStore(assets, d.Companies())
idJSON, _ := json.Marshal(foreign)
intent := intentItem{Summary: "reference foreign target", AssetIDs: []json.RawMessage{idJSON, idJSON}}
if _, err := tools.addOneIntent(intent); err == nil {
t.Fatal("foreign intent should fail while sharing off")
}
query := fmt.Sprintf(`{"id":%d}`, foreign)
if got := callReadJSON(t, tools.listAssets(), query); strings.Contains(fmt.Sprint(got), fmt.Sprintf("sharing-tool-%d.invalid", task.ID)) {
t.Fatalf("foreign asset leaked: %v", got)
}
for _, enabled := range []bool{true, false} {
if _, err := d.UpdateTask(task.ID, db.TaskPatch{ShareGlobalAssets: &enabled}); err != nil {
t.Fatal(err)
}
got := callReadJSON(t, tools.listAssets(), query)
visible := strings.Contains(fmt.Sprint(got), fmt.Sprintf("sharing-tool-%d.invalid", task.ID))
if visible != enabled {
t.Fatalf("live list_assets enabled=%v result=%v", enabled, got)
}
companies, err := d.Companies().ListCompaniesForTask(task.ID)
if err != nil {
t.Fatal(err)
}
found := false
for _, c := range companies {
if c.ID == company {
found = true
}
}
if found != enabled {
t.Fatalf("live company policy enabled=%v found=%v", enabled, found)
}
}
enabled := true
if _, err := d.UpdateTask(task.ID, db.TaskPatch{ShareGlobalAssets: &enabled}); err != nil {
t.Fatal(err)
}
if _, err := tools.addOneIntent(intent); err != nil {
t.Fatalf("explicit opt-in should allow target and duplicate IDs: %v", err)
}
}