func TestConvertCompactMetadata(t *testing.T) {
	body := ioutil.NopCloser(strings.NewReader(retsStart + system + resource + class + table + lookup + lookupType + retsEnd))
	compact, err := rets.ParseMetadataCompactResult(body)
	testutils.Ok(t, err)

	msystem, err := AsStandard(*compact).Convert()
	testutils.Ok(t, err)

	testutils.Equals(t, "MLS System", msystem.System.Description)
	testutils.Equals(t, "1.12.30", string(msystem.Version))
	testutils.Equals(t, "The System is provided to you by Systems.", msystem.System.Comments)

	mresource := msystem.System.MResource
	testutils.Equals(t, "1.12.30", string(mresource.Version))
	testutils.Equals(t, 2, len(mresource.Resource))

	mlookup := mresource.Resource[1].MLookup
	testutils.Equals(t, "1.12.29", string(mlookup.Version))
	testutils.Equals(t, 4, len(mlookup.Lookup))

	mlookupType := mlookup.Lookup[0].MLookupType
	testutils.Equals(t, "1.12.29", string(mlookupType.Version))
	testutils.Equals(t, 4, len(mlookupType.LookupType))

	agent := mresource.Resource[1]
	testutils.Equals(t, 2, len(agent.MClass.Class))
	testutils.Equals(t, "Agent", string(agent.ResourceID))
	testutils.Equals(t, "1.12.29", string(agent.MClass.Version))

}
// GetCompactIncrementalMetadata retrieve the RETS Compact metadata from the server
func (ic *IncrementalCompact) Load(sess rets.Requester, ctx context.Context, url string) error {
	// extract an id'd subesection of metadata
	get := func(id, mtype string) (*rets.CompactMetadata, error) {
		if id == "" {
			id = "0"
		}
		req := rets.MetadataRequest{
			URL:    url,
			Format: "COMPACT",
			MType:  mtype,
			ID:     id,
		}
		reader, er := rets.MetadataStream(sess, ctx, req)
		if er != nil {
			return nil, er
		}
		return rets.ParseMetadataCompactResult(reader)
	}
	msys, err := get("", metadata.MISystem.Name)
	if err != nil {
		return err
	}
	ic.Response = msys.Response
	ic.MSystem = msys.MSystem
	ic.Elements = map[string][]rets.CompactData{}
	// fmt.Printf("compact system: %v\n", compact)
	cds, err := ic.extractChildren(get, []string{}, metadata.MISystem)
	if err != nil {
		return err
	}
	for _, cd := range cds {
		// extract children from this element and put in the system elem
		ic.Elements[cd.Element] = append(ic.Elements[cd.Element], cd)
	}
	return nil
}