forked from forgejo/forgejo
Implement Cargo HTTP index (#24452)
This implements the HTTP index [RFC](https://rust-lang.github.io/rfcs/2789-sparse-index.html) for Cargo registries. Currently this is a preview feature and you need to use the nightly of `cargo`: `cargo +nightly -Z sparse-registry update` See https://github.com/rust-lang/cargo/issues/9069 for more information. --------- Co-authored-by: Giteabot <teabot@gitea.io>
This commit is contained in:
parent
48e3e38ee0
commit
723598b803
4 changed files with 136 additions and 38 deletions
|
@ -98,7 +98,7 @@ func testPackageCargo(t *testing.T, _ *neturl.URL) {
|
|||
url := fmt.Sprintf("%s/api/v1/crates", root)
|
||||
|
||||
t.Run("Index", func(t *testing.T) {
|
||||
t.Run("Config", func(t *testing.T) {
|
||||
t.Run("Git/Config", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
content := readGitContent(t, cargo_service.ConfigFileName)
|
||||
|
@ -110,6 +110,20 @@ func testPackageCargo(t *testing.T, _ *neturl.URL) {
|
|||
assert.Equal(t, url, config.DownloadURL)
|
||||
assert.Equal(t, root, config.APIURL)
|
||||
})
|
||||
|
||||
t.Run("HTTP/Config", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
req := NewRequest(t, "GET", root+"/"+cargo_service.ConfigFileName)
|
||||
resp := MakeRequest(t, req, http.StatusOK)
|
||||
|
||||
var config cargo_service.Config
|
||||
err := json.Unmarshal(resp.Body.Bytes(), &config)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Equal(t, url, config.DownloadURL)
|
||||
assert.Equal(t, root, config.APIURL)
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("Upload", func(t *testing.T) {
|
||||
|
@ -192,40 +206,72 @@ func testPackageCargo(t *testing.T, _ *neturl.URL) {
|
|||
MakeRequest(t, req, http.StatusConflict)
|
||||
|
||||
t.Run("Index", func(t *testing.T) {
|
||||
t.Run("Entry", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
t.Run("Git", func(t *testing.T) {
|
||||
t.Run("Entry", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
content := readGitContent(t, cargo_service.BuildPackagePath(packageName))
|
||||
content := readGitContent(t, cargo_service.BuildPackagePath(packageName))
|
||||
|
||||
var entry cargo_service.IndexVersionEntry
|
||||
err := json.Unmarshal([]byte(content), &entry)
|
||||
assert.NoError(t, err)
|
||||
var entry cargo_service.IndexVersionEntry
|
||||
err := json.Unmarshal([]byte(content), &entry)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Equal(t, packageName, entry.Name)
|
||||
assert.Equal(t, packageVersion, entry.Version)
|
||||
assert.Equal(t, pb.HashSHA256, entry.FileChecksum)
|
||||
assert.False(t, entry.Yanked)
|
||||
assert.Len(t, entry.Dependencies, 1)
|
||||
dep := entry.Dependencies[0]
|
||||
assert.Equal(t, "dep", dep.Name)
|
||||
assert.Equal(t, "1.0", dep.Req)
|
||||
assert.Equal(t, "normal", dep.Kind)
|
||||
assert.True(t, dep.DefaultFeatures)
|
||||
assert.Empty(t, dep.Features)
|
||||
assert.False(t, dep.Optional)
|
||||
assert.Nil(t, dep.Target)
|
||||
assert.NotNil(t, dep.Registry)
|
||||
assert.Equal(t, "https://gitea.io/user/_cargo-index", *dep.Registry)
|
||||
assert.Nil(t, dep.Package)
|
||||
assert.Equal(t, packageName, entry.Name)
|
||||
assert.Equal(t, packageVersion, entry.Version)
|
||||
assert.Equal(t, pb.HashSHA256, entry.FileChecksum)
|
||||
assert.False(t, entry.Yanked)
|
||||
assert.Len(t, entry.Dependencies, 1)
|
||||
dep := entry.Dependencies[0]
|
||||
assert.Equal(t, "dep", dep.Name)
|
||||
assert.Equal(t, "1.0", dep.Req)
|
||||
assert.Equal(t, "normal", dep.Kind)
|
||||
assert.True(t, dep.DefaultFeatures)
|
||||
assert.Empty(t, dep.Features)
|
||||
assert.False(t, dep.Optional)
|
||||
assert.Nil(t, dep.Target)
|
||||
assert.NotNil(t, dep.Registry)
|
||||
assert.Equal(t, "https://gitea.io/user/_cargo-index", *dep.Registry)
|
||||
assert.Nil(t, dep.Package)
|
||||
})
|
||||
|
||||
t.Run("Rebuild", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
err := cargo_service.RebuildIndex(db.DefaultContext, user, user)
|
||||
assert.NoError(t, err)
|
||||
|
||||
_ = readGitContent(t, cargo_service.BuildPackagePath(packageName))
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("Rebuild", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
t.Run("HTTP", func(t *testing.T) {
|
||||
t.Run("Entry", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
err := cargo_service.RebuildIndex(db.DefaultContext, user, user)
|
||||
assert.NoError(t, err)
|
||||
req := NewRequest(t, "GET", root+"/"+cargo_service.BuildPackagePath(packageName))
|
||||
resp := MakeRequest(t, req, http.StatusOK)
|
||||
|
||||
_ = readGitContent(t, cargo_service.BuildPackagePath(packageName))
|
||||
var entry cargo_service.IndexVersionEntry
|
||||
err := json.Unmarshal(resp.Body.Bytes(), &entry)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Equal(t, packageName, entry.Name)
|
||||
assert.Equal(t, packageVersion, entry.Version)
|
||||
assert.Equal(t, pb.HashSHA256, entry.FileChecksum)
|
||||
assert.False(t, entry.Yanked)
|
||||
assert.Len(t, entry.Dependencies, 1)
|
||||
dep := entry.Dependencies[0]
|
||||
assert.Equal(t, "dep", dep.Name)
|
||||
assert.Equal(t, "1.0", dep.Req)
|
||||
assert.Equal(t, "normal", dep.Kind)
|
||||
assert.True(t, dep.DefaultFeatures)
|
||||
assert.Empty(t, dep.Features)
|
||||
assert.False(t, dep.Optional)
|
||||
assert.Nil(t, dep.Target)
|
||||
assert.NotNil(t, dep.Registry)
|
||||
assert.Equal(t, "https://gitea.io/user/_cargo-index", *dep.Registry)
|
||||
assert.Nil(t, dep.Package)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue