| 269 | } |
| 270 | |
| 271 | func TestSyncUpgrade_WaitsForCompletionCache(t *testing.T) { |
| 272 | t.Parallel() |
| 273 | |
| 274 | tmpDir := t.TempDir() |
| 275 | makepkgBin := tmpDir + "/makepkg" |
| 276 | pacmanBin := tmpDir + "/pacman" |
| 277 | gitBin := tmpDir + "/git" |
| 278 | |
| 279 | for _, path := range []string{makepkgBin, pacmanBin, gitBin} { |
| 280 | f, err := os.OpenFile(path, os.O_RDONLY|os.O_CREATE, 0o755) |
| 281 | require.NoError(t, err) |
| 282 | require.NoError(t, f.Close()) |
| 283 | } |
| 284 | |
| 285 | server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| 286 | assert.Equal(t, "/packages.gz", r.URL.Path) |
| 287 | _, err := io.WriteString(w, "# Comment\nrepo-pkg\n") |
| 288 | require.NoError(t, err) |
| 289 | })) |
| 290 | defer server.Close() |
| 291 | |
| 292 | cmdArgs := parser.MakeArguments() |
| 293 | cmdArgs.AddArg("S") |
| 294 | cmdArgs.AddArg("y") |
| 295 | cmdArgs.AddArg("u") |
| 296 | |
| 297 | showOverride := func(cmd *exec.Cmd) error { |
| 298 | return nil |
| 299 | } |
| 300 | |
| 301 | mockRunner := &exe.MockRunner{CaptureFn: func(cmd *exec.Cmd) (string, string, error) { |
| 302 | return "", "", nil |
| 303 | }, ShowFn: showOverride} |
| 304 | cmdBuilder := &exe.CmdBuilder{ |
| 305 | MakepkgBin: makepkgBin, |
| 306 | SudoBin: "su", |
| 307 | PacmanBin: pacmanBin, |
| 308 | PacmanConfigPath: "/etc/pacman.conf", |
| 309 | GitBin: gitBin, |
| 310 | Runner: mockRunner, |
| 311 | SudoLoopEnabled: false, |
| 312 | } |
| 313 | |
| 314 | dbName := mock.NewDB("core") |
| 315 | syncPackagesEntered := make(chan struct{}) |
| 316 | releaseSyncPackages := make(chan struct{}) |
| 317 | var started sync.Once |
| 318 | |
| 319 | db := &mock.DBExecutor{ |
| 320 | AlpmArchitecturesFn: func() ([]string, error) { |
| 321 | return []string{"x86_64"}, nil |
| 322 | }, |
| 323 | RefreshHandleFn: func() error { |
| 324 | return nil |
| 325 | }, |
| 326 | ReposFn: func() []string { |
| 327 | return []string{"core"} |
| 328 | }, |