From 1b4812628fa0389e7f4f4b62a97c5806e3534a12 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 10 Apr 2018 19:14:19 +0200 Subject: [PATCH] Fix derived types missing pattern restrictions We have missed a place where constants to support restrictions need to be generated, which meant that Ipv4AddressNoZone and similar constructs were not doing correct enforcement. JIRA: MDSAL-335 Change-Id: Id659362038e001207eab9ca5f1618c376aa0ea5a Signed-off-by: Robert Varga (cherry picked from commit a2713a39a1b1aac6a2337a09559f930240523311) --- .../binding/yang/types/TypeProviderImpl.java | 2 + .../binding/generator/impl/Mdsal335Test.java | 41 +++++++++++++++++++ .../src/test/resources/mdsal335.yang | 20 +++++++++ 3 files changed, 63 insertions(+) create mode 100644 binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal335Test.java create mode 100644 binding/mdsal-binding-generator-impl/src/test/resources/mdsal335.yang diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderImpl.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderImpl.java index b391190fe0..d6fbc761a9 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderImpl.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderImpl.java @@ -1285,6 +1285,8 @@ public final class TypeProviderImpl implements TypeProvider { genTOBuilder.setTypedef(true); final Restrictions r = BindingGeneratorUtil.getRestrictions(typedef); genTOBuilder.setRestrictions(r); + addStringRegExAsConstant(genTOBuilder, resolveRegExpressionsFromTypedef(typedef)); + if (typedef.getStatus() == Status.DEPRECATED) { genTOBuilder.addAnnotation("", "Deprecated"); } diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal335Test.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal335Test.java new file mode 100644 index 0000000000..6e8f0847e4 --- /dev/null +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal335Test.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2018 Pantheon Technologies, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.generator.impl; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.FileNotFoundException; +import java.net.URISyntaxException; +import java.util.List; +import org.junit.Test; +import org.opendaylight.mdsal.binding.model.api.GeneratedType; +import org.opendaylight.mdsal.binding.model.api.Type; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; +import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; + +public class Mdsal335Test { + + @Test + public void mdsal335Test() throws FileNotFoundException, ReactorException, URISyntaxException { + final SchemaContext context = YangParserTestUtils.parseYangSource("/mdsal335.yang"); + + final List generateTypes = new BindingGeneratorImpl(false).generateTypes(context); + assertNotNull(generateTypes); + assertEquals(2, generateTypes.size()); + + final Type nozoneType = generateTypes.stream().filter(type -> type.getFullyQualifiedName() + .equals("org.opendaylight.yang.gen.v1.mdsal335.rev700101.Ipv4AddressNoZone")).findFirst().get(); + + assertTrue(nozoneType instanceof GeneratedType); + final GeneratedType gen = (GeneratedType) nozoneType; + assertEquals(1, gen.getConstantDefinitions().size()); + } +} diff --git a/binding/mdsal-binding-generator-impl/src/test/resources/mdsal335.yang b/binding/mdsal-binding-generator-impl/src/test/resources/mdsal335.yang new file mode 100644 index 0000000000..c6a320abac --- /dev/null +++ b/binding/mdsal-binding-generator-impl/src/test/resources/mdsal335.yang @@ -0,0 +1,20 @@ +module mdsal335 { + namespace "mdsal335"; + prefix "mdsal335"; + + typedef ipv4-address { + type string { + pattern + '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}' + + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])' + + '(%[\p{N}\p{L}]+)?'; + } + } + + typedef ipv4-address-no-zone { + type mdsal335:ipv4-address { + pattern '[0-9\.]*'; + } + } +} + -- 2.36.6