func cleanPolicyMap()

in internal/testrunner/runners/policy/policy.go [175:230]


func cleanPolicyMap(policyMap common.MapStr, entries []policyEntryFilter) (common.MapStr, error) {
	for _, entry := range entries {
		v, err := policyMap.GetValue(entry.name)
		if errors.Is(err, common.ErrKeyNotFound) {
			continue
		}
		if err != nil {
			return nil, err
		}

		switch {
		case len(entry.elementsEntries) > 0:
			list, err := common.ToMapStrSlice(v)
			if err != nil {
				return nil, err
			}
			clean := make([]any, len(list))
			for i := range list {
				c, err := cleanPolicyMap(list[i], entry.elementsEntries)
				if err != nil {
					return nil, err
				}
				clean[i] = c
			}
			policyMap.Delete(entry.name)
			_, err = policyMap.Put(entry.name, clean)
			if err != nil {
				return nil, err
			}
		case entry.memberReplace != nil:
			m, ok := v.(common.MapStr)
			if !ok {
				return nil, fmt.Errorf("expected map, found %T", v)
			}
			for k, e := range m {
				if entry.memberReplace.regexp.MatchString(k) {
					delete(m, k)
					m[entry.memberReplace.replace] = e
				}
			}
		default:
			if entry.onlyIfEmpty && !isEmpty(v) {
				continue
			}
			err := policyMap.Delete(entry.name)
			if errors.Is(err, common.ErrKeyNotFound) {
				continue
			}
			if err != nil {
				return nil, err
			}
		}
	}

	return policyMap, nil
}