2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.yangtools.restconf.utils;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertNull;
14 import java.io.InputStream;
15 import java.util.AbstractMap.SimpleEntry;
17 import javassist.ClassPool;
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;
43 public class Bug527Test {
45 private RuntimeGeneratedMappingServiceImpl mappingService;
49 this.mappingService = new RuntimeGeneratedMappingServiceImpl(new ClassPool());
51 final ModuleInfoBackedContext moduleInfo = ModuleInfoBackedContext.create();
52 moduleInfo.addModuleInfos(BindingReflections.loadModuleInfos());
53 this.mappingService.onGlobalContextUpdated(moduleInfo.tryToCreateSchemaContext().get());
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();
63 Factory factory = (Factory) RestconfUtils.dataObjectFromInputStream(factoryId, is,
64 mappingService.getSchemaContext(), mappingService, dataSchema);
65 assertNotNull(factory);
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));
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));
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);
91 CompositeNodeTOImpl domInput = new CompositeNodeTOImpl(QName.create(domAlpha.getNodeType(),"input"),null, domAlpha.getValue());
93 CreateFactoryInput nestedInput = (CreateFactoryInput) mappingService.dataObjectFromDataDom(CreateFactoryInput.class, domInput);
94 assertNotNull(nestedInput);
95 assertNotNull(nestedInput.getMachine().getAtts().getAugmentation(CreateExt.class));