返回 DeepSeek-Reasonix
mimo_catalog_downgrade_test.go
根目录 / internal / config / mimo_catalog_downgrade_test.go
1 package config
2
3 import (
4 "encoding/json"
5 "os"
6 "os/exec"
7 "path/filepath"
8 "strings"
9 "testing"
10 )
11
12 // Use an isolated schema-v11 checkout to exercise the actual previous reader
13 // and writer, including deletion followed by a restart in the new version.
14 func TestMimoCatalogPreviousReaderRoundTrip(t *testing.T) {
15 checkout := os.Getenv("REASONIX_MIMO_PREVIOUS_CHECKOUT")
16 if checkout == "" {
17 t.Skip("set REASONIX_MIMO_PREVIOUS_CHECKOUT for previous-reader acceptance")
18 }
19 checkout, err := filepath.Abs(checkout)
20 if err != nil {
21 t.Fatal(err)
22 }
23 checkout, err = filepath.EvalSymlinks(checkout)
24 if err != nil {
25 t.Fatal(err)
26 }
27 dir := t.TempDir()
28 t.Setenv("REASONIX_HOME", dir)
29 path := filepath.Join(dir, "config.toml")
30 const raw = `config_version = 11
31 default_model = "mimo/mimo-v2.5-pro"
32 [[providers]]
33 name = "mimo"
34 kind = "openai"
35 base_url = "https://api.xiaomimimo.com/v1"
36 models = ["mimo-v2.5-pro", "mimo-v2.5"]
37 default = "mimo-v2.5-pro"
38 vision_models = ["mimo-v2.5"]
39 `
40 if err := os.WriteFile(path, []byte(raw), 0o600); err != nil {
41 t.Fatal(err)
42 }
43 if _, err := ApplyUserConfigUpgradesOnStartup(path); err != nil {
44 t.Fatal(err)
45 }
46 probe := filepath.Join(dir, "previous_reader_test.go")
47 const source = `package config
48 import ("os"; "slices"; "testing")
49 func TestMimoPreviousReaderProbe(t *testing.T) {
50 if Default().ConfigVersion != 11 { t.Fatal("probe requires a schema-v11 reader") }
51 path := os.Getenv("REASONIX_COMPAT_CONFIG")
52 c := LoadForEdit(path)
53 p,ok := c.Provider("mimo")
54 if !ok || p.DefaultModel() != "mimo-v2.5-pro" || c.ConfigVersion != 12 { t.Fatal("old reader lost selection or marker") }
55 if os.Getenv("REASONIX_COMPAT_DELETE_FLASH") == "1" {
56 p.Models = slices.DeleteFunc(p.Models,func(m string) bool { return m == "mimo-v2.6-flash" })
57 } else if !p.HasModel("mimo-v2.6-flash") { t.Fatal("old reader lost the new option") }
58 p.DisplayName = "old-reader-edited"
59 if err := c.SaveToScope(path,RenderScopeFull); err != nil { t.Fatal(err) }
60 }`
61 if err := os.WriteFile(probe, []byte(source), 0o600); err != nil {
62 t.Fatal(err)
63 }
64 // Overlay an existing test file: older Go versions do not discover a new
65 // test filename supplied only by an overlay.
66 data, err := json.Marshal(map[string]any{"Replace": map[string]string{filepath.Join(checkout, "internal/config/deepseek_catalog_downgrade_test.go"): probe}})
67 if err != nil {
68 t.Fatal(err)
69 }
70 overlay := filepath.Join(dir, "overlay.json")
71 if err := os.WriteFile(overlay, data, 0o600); err != nil {
72 t.Fatal(err)
73 }
74 for _, deleted := range []string{"0", "1"} {
75 cmd := exec.Command("go", "test", "-overlay", overlay, "./internal/config", "-run", "^TestMimoPreviousReaderProbe$", "-v", "-count=1")
76 cmd.Dir = checkout
77 cmd.Env = append(os.Environ(), "REASONIX_COMPAT_CONFIG="+path, "REASONIX_COMPAT_DELETE_FLASH="+deleted)
78 output, err := cmd.CombinedOutput()
79 if err != nil || !strings.Contains(string(output), "--- PASS: TestMimoPreviousReaderProbe") {
80 t.Fatalf("old reader: %v\n%s", err, output)
81 }
82 if changed, err := ApplyUserConfigUpgradesOnStartup(path); err != nil || changed {
83 t.Fatalf("old writer lost migration marker: %v %v", changed, err)
84 }
85 c := LoadForEdit(path)
86 p, ok := c.Provider("mimo")
87 if !ok || c.ConfigVersion != Default().ConfigVersion || p.DisplayName != "old-reader-edited" ||
88 p.DefaultModel() != "mimo-v2.5-pro" || p.HasModel("mimo-v2.6-flash") != (deleted == "0") ||
89 p.Prices["mimo-v2.6-pro"] == nil || p.Prices["mimo-v2.6-pro"].Input != 3 {
90 t.Fatalf("old reader round-trip lost choices: %+v", p)
91 }
92 }
93 }
94
94 lines GO