Skip to content

Commit

Permalink
Merge pull request #423 from scbizu/fix/multi-tenant-object-path
Browse files Browse the repository at this point in the history
pkg/chartmuseum/server: fix chart object path invalid
  • Loading branch information
jdolitsky committed Mar 10, 2021
2 parents bf8edb2 + b1d0cf4 commit 7a62a23
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 9 deletions.
5 changes: 4 additions & 1 deletion pkg/chartmuseum/server/multitenant/cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -203,11 +203,14 @@ func (server *MultiTenantServer) fetchChartsInStorage(log cm_logger.LoggingFn, r
filteredObjects := []cm_storage.Object{}
for _, object := range allObjects {
if object.HasExtension(cm_repo.ChartPackageFileExtension) {
log(cm_logger.DebugLevel, "GetObject From Storage Backend", "repo", repo, "path", object.Path)
// Since ListObject cannot fetch the content from file list
object, err = server.StorageBackend.GetObject(object.Path)
objectDetail, err := server.StorageBackend.GetObject(pathutil.Join(repo, object.Path))
if err != nil {
return nil, fmt.Errorf("backend storage: chart not found: %q", err)
}
// do not change other object field except content
object.Content = objectDetail.Content
filteredObjects = append(filteredObjects, object)
}
}
Expand Down
33 changes: 25 additions & 8 deletions pkg/chartmuseum/server/multitenant/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -440,15 +440,22 @@ func (suite *MultiTenantServerTestSuite) TearDownSuite() {
os.RemoveAll(suite.TempDirectory)
}

func (suite *MultiTenantServerTestSuite) TestRegenerateRepositoryIndex() {
func (suite *MultiTenantServerTestSuite) regenerateRepositoryIndex(repo string, isFound bool) {
server := suite.Depth0Server

if repo != "" {
server = suite.Depth1Server
}
log := server.Logger.ContextLoggingFn(&gin.Context{})

entry, err := server.initCacheEntry(log, "")
entry, err := server.initCacheEntry(log, repo)
suite.Nil(err, "no error on init cache entry")

objects, err := server.fetchChartsInStorage(log, "")
objects, err := server.fetchChartsInStorage(log, repo)
if !isFound {
suite.Equal(len(objects), 0)
return
}
suite.Nil(err, "no error on fetchChartsInStorage")
diff := storage.GetObjectSliceDiff(server.getRepoObjectSlice(entry), objects, server.TimestampTolerance)
_, err = server.regenerateRepositoryIndexWorker(log, entry, diff)
suite.Nil(err, "no error regenerating repo index")
Expand All @@ -457,7 +464,8 @@ func (suite *MultiTenantServerTestSuite) TestRegenerateRepositoryIndex() {
err = os.Chtimes(suite.TestTarballFilename, newtime, newtime)
suite.Nil(err, "no error changing modtime on temp file")

objects, err = server.fetchChartsInStorage(log, "")
objects, err = server.fetchChartsInStorage(log, repo)
suite.Nil(err, "no error on fetchChartsInStorage")
diff = storage.GetObjectSliceDiff(server.getRepoObjectSlice(entry), objects, server.TimestampTolerance)
_, err = server.regenerateRepositoryIndexWorker(log, entry, diff)
suite.Nil(err, "no error regenerating repo index with tarball updated")
Expand All @@ -466,26 +474,35 @@ func (suite *MultiTenantServerTestSuite) TestRegenerateRepositoryIndex() {
destFile, err := os.Create(brokenTarballFilename)
suite.Nil(err, "no error creating new broken tarball in temp dir")
defer destFile.Close()
objects, err = server.fetchChartsInStorage(log, "")
objects, err = server.fetchChartsInStorage(log, repo)
suite.Nil(err, "no error on fetchChartsInStorage")
diff = storage.GetObjectSliceDiff(server.getRepoObjectSlice(entry), objects, server.TimestampTolerance)
_, err = server.regenerateRepositoryIndexWorker(log, entry, diff)
suite.Nil(err, "error not returned with broken tarball added")

err = os.Chtimes(brokenTarballFilename, newtime, newtime)
suite.Nil(err, "no error changing modtime on broken tarball")
objects, err = server.fetchChartsInStorage(log, "")
objects, err = server.fetchChartsInStorage(log, repo)
suite.Nil(err, "no error on fetchChartsInStorage")
diff = storage.GetObjectSliceDiff(server.getRepoObjectSlice(entry), objects, server.TimestampTolerance)
_, err = server.regenerateRepositoryIndexWorker(log, entry, diff)
suite.Nil(err, "error not returned with broken tarball updated")

err = os.Remove(brokenTarballFilename)
suite.Nil(err, "no error removing broken tarball")
objects, err = server.fetchChartsInStorage(log, "")
objects, err = server.fetchChartsInStorage(log, repo)
suite.Nil(err, "no error on fetchChartsInStorage")
diff = storage.GetObjectSliceDiff(server.getRepoObjectSlice(entry), objects, server.TimestampTolerance)
_, err = server.regenerateRepositoryIndexWorker(log, entry, diff)
suite.Nil(err, "error not returned with broken tarball removed")
}

func (suite *MultiTenantServerTestSuite) TestRegenerateRepositoryIndex() {
suite.regenerateRepositoryIndex("", true)
suite.regenerateRepositoryIndex("org1", true)
suite.regenerateRepositoryIndex("not-set-org", false)
}

func (suite *MultiTenantServerTestSuite) TestGenIndex() {
logger, err := cm_logger.NewLogger(cm_logger.LoggerOptions{
Debug: true,
Expand Down

0 comments on commit 7a62a23

Please sign in to comment.