static MetadataFactory oneToOneRelationMetadata() throws TranslatorException {
    ODataMetadataProcessor processor = new ODataMetadataProcessor();
    MetadataFactory mf =
        new MetadataFactory(
            "vdb",
            1,
            "northwind",
            SystemMetadata.getInstance().getRuntimeTypeMap(),
            new Properties(),
            null);

    CsdlEntityType g1Entity = entityType("g1");
    CsdlEntityType g2Entity = entityType("g2");

    CsdlNavigationProperty navProperty = new CsdlNavigationProperty();
    navProperty.setName("one_2_one");
    navProperty.setType("namespace.g2");
    navProperty.setNullable(false);
    navProperty.setPartner("PartnerPath");

    g1Entity.setNavigationProperties(Arrays.asList(navProperty));

    CsdlEntitySet g1Set = createES("G1", "namespace.g1");
    CsdlEntitySet g2Set = createES("G2", "namespace.g2");

    CsdlNavigationPropertyBinding navBinding = new CsdlNavigationPropertyBinding();
    navBinding.setPath("one_2_one");
    navBinding.setTarget("G2");
    g1Set.setNavigationPropertyBindings(Arrays.asList(navBinding));

    XMLMetadata metadata = buildXmlMetadata(g1Entity, g1Set, g2Entity, g2Set);
    processor.getMetadata(mf, metadata);
    return mf;
  }
  @Test
  public void testAssosiationWithReferentialContriant() throws Exception {
    ODataMetadataProcessor processor = new ODataMetadataProcessor();
    MetadataFactory mf =
        new MetadataFactory(
            "vdb",
            1,
            "northwind",
            SystemMetadata.getInstance().getRuntimeTypeMap(),
            new Properties(),
            null);

    CsdlEntityType g1Entity = entityType("g1");
    g1Entity.getProperties().add(createProperty("g2e2", EdmPrimitiveTypeKind.String));
    g1Entity.setKey(Arrays.asList(new CsdlPropertyRef().setName("g2e2")));
    CsdlEntityType g2Entity = entityType("g2");

    CsdlNavigationProperty navProperty = new CsdlNavigationProperty();
    navProperty.setName("one_2_one");
    navProperty.setType("namespace.g2");
    navProperty.setNullable(false);
    navProperty.setPartner("PartnerPath");
    navProperty.setReferentialConstraints(
        Arrays.asList(
            new CsdlReferentialConstraint().setProperty("g2e2").setReferencedProperty("e2")));

    g1Entity.setNavigationProperties(Arrays.asList(navProperty));

    CsdlEntitySet g1Set = createES("G1", "namespace.g1");
    CsdlEntitySet g2Set = createES("G2", "namespace.g2");

    CsdlNavigationPropertyBinding navBinding = new CsdlNavigationPropertyBinding();
    navBinding.setPath("one_2_one");
    navBinding.setTarget("G2");
    g1Set.setNavigationPropertyBindings(Arrays.asList(navBinding));

    XMLMetadata metadata = buildXmlMetadata(g1Entity, g1Set, g2Entity, g2Set);
    processor.getMetadata(mf, metadata);

    Table g1 = mf.getSchema().getTable("G1");
    Table g2 = mf.getSchema().getTable("G2");

    assertNotNull(g1);
    assertNotNull(g2);

    ForeignKey fk = g2.getForeignKeys().get(0);
    assertEquals("one_2_one", fk.getName());
    assertNotNull(fk.getColumnByName("e2"));
    assertEquals("g2e2", fk.getReferenceColumns().get(0));
  }
  @Test
  public void testSelfJoin() throws Exception {
    ODataMetadataProcessor processor = new ODataMetadataProcessor();
    MetadataFactory mf =
        new MetadataFactory(
            "vdb",
            1,
            "northwind",
            SystemMetadata.getInstance().getRuntimeTypeMap(),
            new Properties(),
            null);

    CsdlEntityType g1Entity = entityType("g1");

    CsdlNavigationProperty navProperty = new CsdlNavigationProperty();
    navProperty.setName("self");
    navProperty.setType("Collection(namespace.g1)");
    navProperty.setNullable(false);
    navProperty.setPartner("PartnerPath");
    navProperty.setCollection(true);

    g1Entity.setNavigationProperties(Arrays.asList(navProperty));

    CsdlEntitySet g1Set = createES("G1", "namespace.g1");

    CsdlNavigationPropertyBinding navBinding = new CsdlNavigationPropertyBinding();
    navBinding.setPath("self");
    navBinding.setTarget("G1");
    g1Set.setNavigationPropertyBindings(Arrays.asList(navBinding));

    XMLMetadata metadata = buildXmlMetadata(g1Entity, g1Set);
    processor.getMetadata(mf, metadata);

    Table g1 = mf.getSchema().getTable("G1_self");
    assertNotNull(g1);
    assertEquals("self", g1.getForeignKeys().get(0).getName());
    assertNotNull(g1.getForeignKeys().get(0).getColumnByName("G1_e1"));
    assertEquals("self", g1.getNameInSource());
  }