1bbbe8d6fd65333f9877959a39676c661ec06c1d
[yangtools.git] / restconf / restconf-util / src / test / java / org / opendaylight / yangtools / restconf / utils / Bug527Test.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.yangtools.restconf.utils;
9
10 import static junit.framework.Assert.assertNotNull;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNull;
13
14 import java.io.InputStream;
15 import java.util.AbstractMap.SimpleEntry;
16
17 import javassist.ClassPool;
18
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.opendaylight.yang.gen.v1.urn.yang.bar.rev140321.CreateFactoryInput;
22 import org.opendaylight.yang.gen.v1.urn.yang.bar.rev140321.Factory;
23 import org.opendaylight.yang.gen.v1.urn.yang.bar.rev140321.factory.Alpha;
24 import org.opendaylight.yang.gen.v1.urn.yang.bar.rev140321.factory.Beta;
25 import org.opendaylight.yang.gen.v1.urn.yang.bar.rev140321.machine.ext.types.machine.type.TypeA;
26 import org.opendaylight.yang.gen.v1.urn.yang.bar.rev140321.machine.types.Types;
27 import org.opendaylight.yang.gen.v1.urn.yang.bar.rev140321.machine.types.types.MachineType;
28 import org.opendaylight.yang.gen.v1.urn.yang.baz.rev140321.machine.def.Machine;
29 import org.opendaylight.yang.gen.v1.urn.yang.baz.rev140321.machine.def.machine.Atts;
30 import org.opendaylight.yang.gen.v1.urn.yang.foo.rev140321.AlphaExt;
31 import org.opendaylight.yang.gen.v1.urn.yang.foo.rev140321.BetaExt;
32 import org.opendaylight.yang.gen.v1.urn.yang.foo.rev140321.CreateExt;
33 import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext;
34 import org.opendaylight.yangtools.sal.binding.generator.impl.RuntimeGeneratedMappingServiceImpl;
35 import org.opendaylight.yangtools.yang.binding.DataObject;
36 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
37 import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
38 import org.opendaylight.yangtools.yang.common.QName;
39 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
40 import org.opendaylight.yangtools.yang.data.impl.CompositeNodeTOImpl;
41 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
42
43 public class Bug527Test {
44
45     private RuntimeGeneratedMappingServiceImpl mappingService;
46
47     @Before
48     public void setup() {
49         this.mappingService = new RuntimeGeneratedMappingServiceImpl(new ClassPool());
50
51         final ModuleInfoBackedContext moduleInfo = ModuleInfoBackedContext.create();
52         moduleInfo.addModuleInfos(BindingReflections.loadModuleInfos());
53         this.mappingService.onGlobalContextUpdated(moduleInfo.tryToCreateSchemaContext().get());
54     }
55
56     @Test
57     public void testToDataObjectMappingWithNestedAugmentations() {
58         InstanceIdentifier<Factory> factoryId = InstanceIdentifier.builder(Factory.class).toInstance();
59         InputStream is = this.getClass().getClassLoader().getResourceAsStream("topology-bug527.xml");
60         DataSchemaNode dataSchema = RestconfUtils.toRestconfIdentifier(factoryId, mappingService,
61                 mappingService.getSchemaContext()).getValue();
62
63         Factory factory = (Factory) RestconfUtils.dataObjectFromInputStream(factoryId, is,
64                 mappingService.getSchemaContext(), mappingService, dataSchema);
65         assertNotNull(factory);
66
67         Alpha alpha = factory.getAlpha();
68         Machine alphaMachine = alpha.getMachine();
69         Atts alphaAtts = alphaMachine.getAtts();
70         AlphaExt alphaAttsAug = alphaAtts.getAugmentation(AlphaExt.class);
71         Types alphaMachineTypes = alphaAttsAug.getTypes();
72         MachineType alphaMachineType = alphaMachineTypes.getMachineType();
73         TypeA alphaTypeA = (TypeA) alphaMachineType;
74         assertEquals("id-alpha", alphaTypeA.getId());
75         assertNull(alphaAtts.getAugmentation(BetaExt.class));
76
77         Beta beta = factory.getBeta();
78         Machine betaMachine = beta.getMachine();
79         Atts betaAtts = betaMachine.getAtts();
80         BetaExt betaAttsAug = betaAtts.getAugmentation(BetaExt.class);
81         Types betaMachineTypes = betaAttsAug.getTypes();
82         MachineType betaMachineType = betaMachineTypes.getMachineType();
83         TypeA betaTypeA = (TypeA) betaMachineType;
84         assertEquals("id-beta", betaTypeA.getId());
85         assertNull(betaAtts.getAugmentation(AlphaExt.class));
86
87         InstanceIdentifier<? extends DataObject> alphaPath = InstanceIdentifier.builder(Factory.class).child(Alpha.class).build();
88         CompositeNode domAlpha = mappingService.toDataDom(new SimpleEntry<InstanceIdentifier<? extends DataObject>,DataObject>(alphaPath,alpha)).getValue();
89         assertNotNull(domAlpha);
90
91         CompositeNodeTOImpl domInput = new CompositeNodeTOImpl(QName.create(domAlpha.getNodeType(),"input"),null, domAlpha.getValue());
92
93         CreateFactoryInput nestedInput = (CreateFactoryInput) mappingService.dataObjectFromDataDom(CreateFactoryInput.class, domInput);
94         assertNotNull(nestedInput);
95         assertNotNull(nestedInput.getMachine().getAtts().getAugmentation(CreateExt.class));
96
97
98     }
99
100 }