mirror of
https://github.com/RuoJi6/ARTEX.git
synced 2026-11-08 20:23:49 +08:00
77 lines
2.4 KiB
Go
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)
|
|
}
|
|
}
|