diff --git a/examples/complex.mql.yaml b/examples/complex.mql.yaml index 3ba2a542e4..13188ed539 100644 --- a/examples/complex.mql.yaml +++ b/examples/complex.mql.yaml @@ -52,7 +52,7 @@ packs: # This MQL uses the property defined above. You can override it via # e.g. --props "home='/home/user'" mql: | - file( props.home ) { * } + file( props.home ) { basename user group } # These are shared queries that can be used in any querypack queries: diff --git a/explorer/mquery.go b/explorer/mquery.go index 171fbd5b82..58ee0dc359 100644 --- a/explorer/mquery.go +++ b/explorer/mquery.go @@ -77,6 +77,13 @@ func (m *Mquery) RefreshMRN(ownerMRN string) error { m.Mrn = nu m.Uid = "" + + for i := range m.Props { + if err := m.Props[i].RefreshMRN(ownerMRN); err != nil { + return err + } + } + return nil } @@ -118,6 +125,9 @@ func (m *Mquery) RefreshChecksum( for i := range m.Props { prop := m.Props[i] + if _, err := prop.RefreshChecksumAndType(schema); err != nil { + return err + } if prop.Checksum == "" { return errors.New("referenced property '" + prop.Mrn + "' checksum is empty") } diff --git a/explorer/mquery_test.go b/explorer/mquery_test.go index 20f6e606bc..6a62a42be1 100644 --- a/explorer/mquery_test.go +++ b/explorer/mquery_test.go @@ -4,13 +4,42 @@ package explorer import ( + "context" "encoding/json" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.mondoo.com/cnquery/providers-sdk/v1/testutils" ) +func TestMquery_Refresh(t *testing.T) { + a := &Mquery{ + Mql: "mondoo.version != props.world", + Uid: "my-id0", + Props: []*Property{{Mql: "'hi'", Uid: "world"}}, + } + + err := a.RefreshMRN("//owner") + require.NoError(t, err) + assert.Equal(t, "//owner/queries/my-id0", a.Mrn) + assert.Empty(t, a.Uid) + assert.Equal(t, "//owner/queries/world", a.Props[0].Mrn) + assert.Empty(t, a.Props[0].Uid) + + x := testutils.LinuxMock() + err = a.RefreshChecksum( + context.Background(), + x.Schema(), + func(ctx context.Context, mrn string) (*Mquery, error) { + return nil, nil + }, + ) + require.NoError(t, err) + assert.Equal(t, "5KkJ/lLHnBM=", a.Checksum) + assert.Equal(t, "9NhbOk30tEg=", a.Props[0].Checksum) +} + func TestMqueryMerge(t *testing.T) { a := &Mquery{ Mql: "base",