Skip to content

Commit bbdb1f3

Browse files
authored
Fix dump subcommand in 8.x (#785)
1 parent d334501 commit bbdb1f3

File tree

69 files changed

+2741
-24
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+2741
-24
lines changed

cmd/dump.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func dumpInstalledObjectsCmd(cmd *cobra.Command, args []string) error {
7070
return errors.Wrap(err, "dump failed")
7171
}
7272
if n == 0 {
73-
cmd.Printf("No objects were dumped for package %s, is it installed?", packageName)
73+
cmd.Printf("No objects were dumped for package %s, is it installed?\n", packageName)
7474
return nil
7575
}
7676
cmd.Printf("Dumped %d installed objects for package %s to %s\n", n, packageName, outputPath)

internal/dump/indextemplates.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"fmt"
1111
"io/ioutil"
1212

13+
"github.com/elastic/elastic-package/internal/common"
1314
"github.com/elastic/elastic-package/internal/elasticsearch"
1415
)
1516

@@ -97,7 +98,7 @@ func getIndexTemplatesForPackage(ctx context.Context, api *elasticsearch.API, pa
9798
indexTemplate.raw = indexTemplateRaw
9899

99100
meta := indexTemplate.IndexTemplate.Meta
100-
if meta.Package.Name != packageName || meta.ManagedBy != "ingest-manager" {
101+
if meta.Package.Name != packageName || !managedByFleet(meta.ManagedBy) {
101102
// This is not the droid you are looking for.
102103
continue
103104
}
@@ -107,3 +108,8 @@ func getIndexTemplatesForPackage(ctx context.Context, api *elasticsearch.API, pa
107108

108109
return indexTemplates, nil
109110
}
111+
112+
func managedByFleet(managedBy string) bool {
113+
var managers = []string{"ingest-manager", "fleet"}
114+
return common.StringSliceContains(managers, managedBy)
115+
}

internal/dump/installedobjects_test.go

Lines changed: 80 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package dump
77
import (
88
"context"
99
"encoding/json"
10+
"errors"
1011
"io/fs"
1112
"io/ioutil"
1213
"os"
@@ -15,30 +16,87 @@ import (
1516

1617
"github.com/stretchr/testify/assert"
1718
"github.com/stretchr/testify/require"
19+
"github.com/stretchr/testify/suite"
1820

21+
"github.com/elastic/elastic-package/internal/elasticsearch"
1922
estest "github.com/elastic/elastic-package/internal/elasticsearch/test"
2023
"github.com/elastic/elastic-package/internal/files"
2124
)
2225

23-
func TestInstalledObjectsDumpAll(t *testing.T) {
24-
client := estest.ElasticsearchClient(t, "./testdata/elasticsearch-mock-dump-apache")
25-
outputDir := t.TempDir()
26-
dumper := NewInstalledObjectsDumper(client, "apache")
26+
func TestDumpInstalledObjects(t *testing.T) {
27+
// Files for each suite are recorded automatically on first test run.
28+
// To add a new suite:
29+
// - Configure it here.
30+
// - Install the package in a running stack.
31+
// - Configure environment variables for this stack (eval "$(elastic-package stack shellinit)").
32+
// - Run tests.
33+
// - Check that recorded files make sense and commit them.
34+
suites := []*installedObjectsDumpSuite{
35+
&installedObjectsDumpSuite{
36+
PackageName: "apache",
37+
RecordDir: "./testdata/elasticsearch-7-mock-dump-apache",
38+
DumpDir: "./testdata/elasticsearch-7-apache-dump-all",
39+
},
40+
&installedObjectsDumpSuite{
41+
PackageName: "apache",
42+
RecordDir: "./testdata/elasticsearch-8-mock-dump-apache",
43+
DumpDir: "./testdata/elasticsearch-8-apache-dump-all",
44+
},
45+
}
46+
47+
for _, s := range suites {
48+
suite.Run(t, s)
49+
}
50+
}
51+
52+
type installedObjectsDumpSuite struct {
53+
suite.Suite
54+
55+
// PackageName is the name of the package.
56+
PackageName string
57+
58+
// RecordDir is where responses from Elasticsearch are recorded.
59+
RecordDir string
60+
61+
// DumpDir is where the expected dumped files are stored.
62+
DumpDir string
63+
}
64+
65+
func (s *installedObjectsDumpSuite) SetupTest() {
66+
_, err := os.Stat(s.DumpDir)
67+
if errors.Is(err, os.ErrNotExist) {
68+
client, err := elasticsearch.Client()
69+
s.Require().NoError(err)
70+
71+
dumper := NewInstalledObjectsDumper(client.API, s.PackageName)
72+
n, err := dumper.DumpAll(context.Background(), s.DumpDir)
73+
s.Require().NoError(err)
74+
s.Require().Greater(n, 0)
75+
} else {
76+
s.Require().NoError(err)
77+
}
78+
}
79+
80+
func (s *installedObjectsDumpSuite) TestDumpAll() {
81+
client := estest.ElasticsearchClient(s.T(), s.RecordDir)
82+
83+
outputDir := s.T().TempDir()
84+
dumper := NewInstalledObjectsDumper(client, s.PackageName)
2785
n, err := dumper.DumpAll(context.Background(), outputDir)
28-
require.NoError(t, err)
86+
s.Require().NoError(err)
2987

30-
filesExpected := countFiles(t, "./testdata/apache-dump-all")
31-
assert.Equal(t, filesExpected, n)
88+
filesExpected := countFiles(s.T(), s.DumpDir)
89+
s.Assert().Equal(filesExpected, n)
3290

33-
filesFound := countFiles(t, outputDir)
34-
assert.Equal(t, filesExpected, filesFound)
91+
filesFound := countFiles(s.T(), outputDir)
92+
s.Assert().Equal(filesExpected, filesFound)
3593

36-
assertEqualDumps(t, "./testdata/apache-dump-all", outputDir)
94+
assertEqualDumps(s.T(), s.DumpDir, outputDir)
3795
}
3896

39-
func TestInstalledObjectsDumpSome(t *testing.T) {
40-
client := estest.ElasticsearchClient(t, "./testdata/elasticsearch-mock-dump-apache")
41-
dumper := NewInstalledObjectsDumper(client, "apache")
97+
func (s *installedObjectsDumpSuite) TestDumpSome() {
98+
client := estest.ElasticsearchClient(s.T(), s.RecordDir)
99+
dumper := NewInstalledObjectsDumper(client, s.PackageName)
42100

43101
// In a map so order of execution is randomized.
44102
dumpers := map[string]func(ctx context.Context, outputDir string) (int, error){
@@ -49,19 +107,19 @@ func TestInstalledObjectsDumpSome(t *testing.T) {
49107
}
50108

51109
for dir, dumpFunction := range dumpers {
52-
t.Run(dir, func(t *testing.T) {
53-
outputDir := t.TempDir()
110+
s.Run(dir, func() {
111+
outputDir := s.T().TempDir()
54112
n, err := dumpFunction(context.Background(), outputDir)
55-
require.NoError(t, err)
113+
s.Require().NoError(err)
56114

57-
expectedDir := subDir(t, "./testdata/apache-dump-all", dir)
58-
filesExpected := countFiles(t, expectedDir)
59-
assert.Equal(t, filesExpected, n)
115+
expectedDir := subDir(s.T(), s.DumpDir, dir)
116+
filesExpected := countFiles(s.T(), expectedDir)
117+
s.Assert().Equal(filesExpected, n)
60118

61-
filesFound := countFiles(t, outputDir)
62-
assert.Equal(t, filesExpected, filesFound)
119+
filesFound := countFiles(s.T(), outputDir)
120+
s.Assert().Equal(filesExpected, filesFound)
63121

64-
assertEqualDumps(t, expectedDir, outputDir)
122+
assertEqualDumps(s.T(), expectedDir, outputDir)
65123
})
66124
}
67125
}

internal/dump/testdata/apache-dump-all/component_templates/.fleet_component_template-1.json renamed to internal/dump/testdata/elasticsearch-7-apache-dump-all/component_templates/.fleet_component_template-1.json

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)