From 4d4a228edfdeb06d59048efa535eaec774de9413 Mon Sep 17 00:00:00 2001 From: Nick Cross Date: Thu, 10 Jul 2025 12:30:06 +0100 Subject: [PATCH 1/4] NCL-9197 Add ability to import RPMs --- .../koji/model/json/BuildDescription.java | 19 +++++++++++- .../build/koji/model/json/BuildExtraInfo.java | 16 ++++++++-- .../build/koji/model/json/BuildOutput.java | 11 ++++++- ...aInfo.java => EmptyTypeInfoExtraInfo.java} | 12 +++---- .../build/koji/model/json/FileExtraInfo.java | 13 ++++---- .../koji/model/json/KojiJsonConstants.java | 2 ++ .../koji/model/json/StandardArchitecture.java | 2 +- .../koji/model/json/StandardOutputType.java | 4 +-- .../koji/model/json/TypeInfoExtraInfo.java | 31 ++++++++++++++----- 9 files changed, 82 insertions(+), 28 deletions(-) rename src/main/java/com/redhat/red/build/koji/model/json/{NpmTypeInfoExtraInfo.java => EmptyTypeInfoExtraInfo.java} (77%) diff --git a/src/main/java/com/redhat/red/build/koji/model/json/BuildDescription.java b/src/main/java/com/redhat/red/build/koji/model/json/BuildDescription.java index c5c3e88..6d1dcf3 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/BuildDescription.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/BuildDescription.java @@ -262,6 +262,23 @@ public Builder withMavenInfoAndType( ProjectVersionRef gav ) return this; } + public Builder withRpmInfoAndType(ProjectVersionRef gav ) + { + if ( target.extraInfo == null ) + { + target.extraInfo = new BuildExtraInfo(); + } + target.extraInfo.setMavenRpm(gav.toString()); + + if (target.extraInfo.getTypeInfo() == null) + { + target.extraInfo.setTypeInfo( new TypeInfoExtraInfo() ); + } + target.extraInfo.getTypeInfo().setRpmTypeInfoExtraInfo( EmptyTypeInfoExtraInfo.getInstance() ); + + return this; + } + public Builder withNpmInfoAndType( NpmPackageRef nv ) { NpmExtraInfo npmExtraInfo = new NpmExtraInfo( nv.getName(), nv.getVersion().toString() ); @@ -278,7 +295,7 @@ public Builder withNpmInfoAndType( NpmPackageRef nv ) { target.extraInfo.setTypeInfo( new TypeInfoExtraInfo() ); } - target.extraInfo.getTypeInfo().setNpmTypeInfoExtraInfo( NpmTypeInfoExtraInfo.getInstance() ); + target.extraInfo.getTypeInfo().setNpmTypeInfoExtraInfo( EmptyTypeInfoExtraInfo.getInstance() ); return this; } diff --git a/src/main/java/com/redhat/red/build/koji/model/json/BuildExtraInfo.java b/src/main/java/com/redhat/red/build/koji/model/json/BuildExtraInfo.java index 2a744e0..36dca4d 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/BuildExtraInfo.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/BuildExtraInfo.java @@ -16,9 +16,8 @@ package com.redhat.red.build.koji.model.json; import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonInclude.Include; - +import com.fasterxml.jackson.annotation.JsonProperty; import org.commonjava.atlas.maven.ident.ref.ProjectVersionRef; import org.commonjava.atlas.npm.ident.ref.NpmPackageRef; import org.commonjava.rwx.anno.DataKey; @@ -34,6 +33,7 @@ import static com.redhat.red.build.koji.model.json.KojiJsonConstants.IMAGE_INFO; import static com.redhat.red.build.koji.model.json.KojiJsonConstants.IMPORT_INITIATOR; import static com.redhat.red.build.koji.model.json.KojiJsonConstants.MAVEN_INFO; +import static com.redhat.red.build.koji.model.json.KojiJsonConstants.MAVEN_RPM; import static com.redhat.red.build.koji.model.json.KojiJsonConstants.NPM_INFO; import static com.redhat.red.build.koji.model.json.KojiJsonConstants.OSBS_BUILD; import static com.redhat.red.build.koji.model.json.KojiJsonConstants.SCM_TAG; @@ -87,6 +87,10 @@ public class BuildExtraInfo @DataKey( SCM_TAG ) private String scmTag; + @JsonProperty( MAVEN_RPM ) + @DataKey( MAVEN_RPM ) + private String mavenRpm; + @JsonProperty( OSBS_BUILD ) @DataKey( OSBS_BUILD ) private OsbsBuildExtraInfo osbsBuild; @@ -292,4 +296,12 @@ public String toString() ", submitter='" + submitter + '\'' + '}'; } + + public String getMavenRpm() { + return mavenRpm; + } + + public void setMavenRpm(String mavenRpm) { + this.mavenRpm = mavenRpm; + } } diff --git a/src/main/java/com/redhat/red/build/koji/model/json/BuildOutput.java b/src/main/java/com/redhat/red/build/koji/model/json/BuildOutput.java index 2793b23..389a56a 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/BuildOutput.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/BuildOutput.java @@ -276,12 +276,21 @@ public Builder withNpmInfoAndType( NpmPackageRef ref ) target.outputType = StandardOutputType.npm.getName(); NpmExtraInfo npmExtraInfo = new NpmExtraInfo( ref.getName(), ref.getVersion().toString() ); - TypeInfoExtraInfo typeInfo = new TypeInfoExtraInfo( NpmTypeInfoExtraInfo.getInstance() ); + TypeInfoExtraInfo typeInfo = new TypeInfoExtraInfo( EmptyTypeInfoExtraInfo.getInstance() ); target.extraInfo = new FileExtraInfo( npmExtraInfo, typeInfo ); return this; } + public Builder withRpmInfoAndType() + { + target.outputType = StandardOutputType.rpm.getName(); + TypeInfoExtraInfo typeInfo = new TypeInfoExtraInfo( EmptyTypeInfoExtraInfo.getInstance() ); + target.extraInfo = new FileExtraInfo( typeInfo ); + + return this; + } + public Builder withRemoteSourcesInfoAndType( List sourcesExtraInfo ) { target.outputType = StandardOutputType.remote_sources.getName(); diff --git a/src/main/java/com/redhat/red/build/koji/model/json/NpmTypeInfoExtraInfo.java b/src/main/java/com/redhat/red/build/koji/model/json/EmptyTypeInfoExtraInfo.java similarity index 77% rename from src/main/java/com/redhat/red/build/koji/model/json/NpmTypeInfoExtraInfo.java rename to src/main/java/com/redhat/red/build/koji/model/json/EmptyTypeInfoExtraInfo.java index cab2bd9..454a0b3 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/NpmTypeInfoExtraInfo.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/EmptyTypeInfoExtraInfo.java @@ -21,19 +21,19 @@ * Created by pkocandr on 06/22/21 */ @StructPart -public class NpmTypeInfoExtraInfo +public class EmptyTypeInfoExtraInfo { - private static NpmTypeInfoExtraInfo instance; + private static EmptyTypeInfoExtraInfo instance; - public NpmTypeInfoExtraInfo() + public EmptyTypeInfoExtraInfo() { } - public static NpmTypeInfoExtraInfo getInstance() { + public static EmptyTypeInfoExtraInfo getInstance() { if (instance == null) { // if instance is null, initialize - instance = new NpmTypeInfoExtraInfo(); + instance = new EmptyTypeInfoExtraInfo(); } return instance; } @@ -41,6 +41,6 @@ public static NpmTypeInfoExtraInfo getInstance() { @Override public String toString() { - return "NpmTypeInfoExtraInfo{}"; + return "EmptyTypeInfoExtraInfo{}"; } } diff --git a/src/main/java/com/redhat/red/build/koji/model/json/FileExtraInfo.java b/src/main/java/com/redhat/red/build/koji/model/json/FileExtraInfo.java index 71b11b1..d0d16ed 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/FileExtraInfo.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/FileExtraInfo.java @@ -16,9 +16,8 @@ package com.redhat.red.build.koji.model.json; import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonInclude.Include; - +import com.fasterxml.jackson.annotation.JsonProperty; import org.commonjava.atlas.maven.ident.ref.ProjectVersionRef; import org.commonjava.rwx.anno.DataKey; import org.commonjava.rwx.anno.StructPart; @@ -46,11 +45,6 @@ public class FileExtraInfo @DataKey( TYPEINFO ) private TypeInfoExtraInfo typeInfo; - public FileExtraInfo( @JsonProperty( MAVEN_INFO ) MavenExtraInfo mavenExtraInfo ) - { - this.mavenExtraInfo = mavenExtraInfo; - } - public FileExtraInfo( @JsonProperty( NPM_INFO ) NpmExtraInfo npmExtraInfo, @JsonProperty( TYPEINFO ) TypeInfoExtraInfo typeInfo ) { @@ -58,6 +52,11 @@ public FileExtraInfo( @JsonProperty( NPM_INFO ) NpmExtraInfo npmExtraInfo, this.typeInfo = typeInfo; } + public FileExtraInfo( @JsonProperty( MAVEN_INFO ) MavenExtraInfo mavenExtraInfo ) + { + this.mavenExtraInfo = mavenExtraInfo; + } + public FileExtraInfo( @JsonProperty( TYPEINFO ) TypeInfoExtraInfo typeInfo ) { this.typeInfo = typeInfo; diff --git a/src/main/java/com/redhat/red/build/koji/model/json/KojiJsonConstants.java b/src/main/java/com/redhat/red/build/koji/model/json/KojiJsonConstants.java index a9eedb2..80ab4b6 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/KojiJsonConstants.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/KojiJsonConstants.java @@ -84,6 +84,8 @@ public final class KojiJsonConstants public static final String MAVEN_OUTPUT_TYPE = "maven"; + public static final String MAVEN_RPM = "maven_rpm"; + public static final String MD5_CHECKSUM_TYPE = "md5"; public static final String METADATA_VERSION = "metadata_version"; diff --git a/src/main/java/com/redhat/red/build/koji/model/json/StandardArchitecture.java b/src/main/java/com/redhat/red/build/koji/model/json/StandardArchitecture.java index 64718d9..cac0850 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/StandardArchitecture.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/StandardArchitecture.java @@ -20,5 +20,5 @@ */ public enum StandardArchitecture { - i386, x86_64, noarch; + i386, x86_64, noarch, src; } diff --git a/src/main/java/com/redhat/red/build/koji/model/json/StandardOutputType.java b/src/main/java/com/redhat/red/build/koji/model/json/StandardOutputType.java index cea2019..7c890b7 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/StandardOutputType.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/StandardOutputType.java @@ -24,8 +24,8 @@ public enum StandardOutputType maven("maven"), remote_sources("remote-sources"), REMOTE_SOURCE_FILE("remote-source-file"), - npm("npm"); - + npm("npm"), + rpm("rpm"); private String name; StandardOutputType(String name) { diff --git a/src/main/java/com/redhat/red/build/koji/model/json/TypeInfoExtraInfo.java b/src/main/java/com/redhat/red/build/koji/model/json/TypeInfoExtraInfo.java index a522313..9e742f5 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/TypeInfoExtraInfo.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/TypeInfoExtraInfo.java @@ -31,6 +31,7 @@ import static com.redhat.red.build.koji.model.json.KojiJsonConstants.NPM_TYPE_INFO; import static com.redhat.red.build.koji.model.json.KojiJsonConstants.REMOTE_SOURCES; import static com.redhat.red.build.koji.model.json.KojiJsonConstants.REMOTE_SOURCE_FILE; +import static com.redhat.red.build.koji.model.json.KojiJsonConstants.RPM; /** * Created by jbrazdil on 2021-04-08. @@ -49,7 +50,11 @@ public class TypeInfoExtraInfo @JsonProperty( NPM_TYPE_INFO ) @DataKey( NPM_TYPE_INFO ) - private NpmTypeInfoExtraInfo npmTypeInfoExtraInfo; + private EmptyTypeInfoExtraInfo npmTypeInfoExtraInfo; + + @JsonProperty( RPM ) + @DataKey( RPM ) + private EmptyTypeInfoExtraInfo rpmTypeInfoExtraInfo; @JsonProperty( IMAGE_INFO ) @DataKey( IMAGE_INFO ) @@ -61,7 +66,7 @@ public class TypeInfoExtraInfo @JsonCreator public TypeInfoExtraInfo( @JsonProperty( REMOTE_SOURCE_FILE ) RemoteSourceFileExtraInfo sourceFileInfo, - @JsonProperty( NPM_TYPE_INFO ) NpmTypeInfoExtraInfo npm, + @JsonProperty( NPM_TYPE_INFO ) EmptyTypeInfoExtraInfo npm, @JsonProperty( REMOTE_SOURCES ) List remoteSourcesExtraInfo ) { this.remoteSourceFileExtraInfo = sourceFileInfo; @@ -75,7 +80,7 @@ public TypeInfoExtraInfo( @JsonProperty( REMOTE_SOURCES ) List stream = Files.walk( basePath ).filter( Files::isRegularFile ) ) - { - stream.forEach( ( path ) -> System.out.println( basePath.relativize( path ) ) ); - } - } - -} From e2e1ca67394722b5ddbd5a405f665db9a4271d73 Mon Sep 17 00:00:00 2001 From: Nick Cross Date: Fri, 11 Jul 2025 11:47:58 +0100 Subject: [PATCH 3/4] NCL-9197 Add tests. Fix code --- .../build/koji/model/json/BuildExtraInfo.java | 5 +-- .../build/koji/model/json/BuildOutput.java | 3 -- .../build/koji/model/json/BuildSource.java | 8 +++++ .../model/json/EmptyTypeInfoExtraInfo.java | 20 ++++++----- .../build/koji/model/json/FileExtraInfo.java | 2 +- .../koji/model/json/AbstractJsonTest.java | 20 ++++++++--- .../build/koji/model/json/KojiImportTest.java | 35 ++++++++++++++++++- 7 files changed, 74 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/redhat/red/build/koji/model/json/BuildExtraInfo.java b/src/main/java/com/redhat/red/build/koji/model/json/BuildExtraInfo.java index 36dca4d..003eaf7 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/BuildExtraInfo.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/BuildExtraInfo.java @@ -269,12 +269,12 @@ public boolean equals( Object o ) } BuildExtraInfo that = (BuildExtraInfo ) o; - return Objects.equals( mavenExtraInfo, that.mavenExtraInfo ) && Objects.equals( npmExtraInfo, that.npmExtraInfo ) && Objects.equals( imageExtraInfo, that.imageExtraInfo ) && Objects.equals( externalBuildId, that.externalBuildId ) && Objects.equals( buildSystem, that.buildSystem ) && Objects.equals( externalBuildUrl, that.externalBuildUrl ) && Objects.equals( importInitiator, that.importInitiator ) && Objects.equals( scmTag, that.scmTag ) && Objects.equals( typeInfo, that.typeInfo ) && Objects.equals( containerKojiTaskId, that.containerKojiTaskId ) && Objects.equals( filesystemKojiTaskId, that.filesystemKojiTaskId ) && Objects.equals( osbsBuild, that.osbsBuild ) && Objects.equals( submitter, that.submitter ); + return Objects.equals( mavenExtraInfo, that.mavenExtraInfo ) && Objects.equals( npmExtraInfo, that.npmExtraInfo ) && Objects.equals( imageExtraInfo, that.imageExtraInfo ) && Objects.equals( externalBuildId, that.externalBuildId ) && Objects.equals( buildSystem, that.buildSystem ) && Objects.equals( externalBuildUrl, that.externalBuildUrl ) && Objects.equals( importInitiator, that.importInitiator ) && Objects.equals( scmTag, that.scmTag ) && Objects.equals( mavenRpm, that.mavenRpm )&& Objects.equals( typeInfo, that.typeInfo ) && Objects.equals( containerKojiTaskId, that.containerKojiTaskId ) && Objects.equals( filesystemKojiTaskId, that.filesystemKojiTaskId ) && Objects.equals( osbsBuild, that.osbsBuild ) && Objects.equals( submitter, that.submitter ); } @Override public int hashCode() { - return Objects.hash( mavenExtraInfo, npmExtraInfo, imageExtraInfo, externalBuildId, buildSystem, externalBuildUrl, importInitiator, scmTag, typeInfo, containerKojiTaskId, filesystemKojiTaskId, osbsBuild, submitter ); + return Objects.hash( mavenExtraInfo, npmExtraInfo, imageExtraInfo, externalBuildId, buildSystem, externalBuildUrl, importInitiator, scmTag, mavenRpm, typeInfo, containerKojiTaskId, filesystemKojiTaskId, osbsBuild, submitter ); } @Override @@ -291,6 +291,7 @@ public String toString() ", externalBuildUrl='" + externalBuildUrl + '\'' + ", importInitiator='" + importInitiator + '\'' + ", scmTag='" + scmTag + '\'' + + ", mavenRpm='" + mavenRpm + '\'' + ", typeInfo=" + typeInfo + ", osbsBuild=" + osbsBuild + ", submitter='" + submitter + '\'' + diff --git a/src/main/java/com/redhat/red/build/koji/model/json/BuildOutput.java b/src/main/java/com/redhat/red/build/koji/model/json/BuildOutput.java index 389a56a..363df67 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/BuildOutput.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/BuildOutput.java @@ -285,9 +285,6 @@ public Builder withNpmInfoAndType( NpmPackageRef ref ) public Builder withRpmInfoAndType() { target.outputType = StandardOutputType.rpm.getName(); - TypeInfoExtraInfo typeInfo = new TypeInfoExtraInfo( EmptyTypeInfoExtraInfo.getInstance() ); - target.extraInfo = new FileExtraInfo( typeInfo ); - return this; } diff --git a/src/main/java/com/redhat/red/build/koji/model/json/BuildSource.java b/src/main/java/com/redhat/red/build/koji/model/json/BuildSource.java index aaf5c4e..f6e12ae 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/BuildSource.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/BuildSource.java @@ -94,4 +94,12 @@ public int hashCode() result = 31 * result + ( getRevision() != null ? getRevision().hashCode() : 0 ); return result; } + + @Override + public String toString() { + return "BuildSource{" + + "url='" + url + '\'' + + ", revision='" + revision + '\'' + + '}'; + } } diff --git a/src/main/java/com/redhat/red/build/koji/model/json/EmptyTypeInfoExtraInfo.java b/src/main/java/com/redhat/red/build/koji/model/json/EmptyTypeInfoExtraInfo.java index 454a0b3..9ecd62a 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/EmptyTypeInfoExtraInfo.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/EmptyTypeInfoExtraInfo.java @@ -21,17 +21,14 @@ * Created by pkocandr on 06/22/21 */ @StructPart -public class EmptyTypeInfoExtraInfo -{ +public class EmptyTypeInfoExtraInfo { private static EmptyTypeInfoExtraInfo instance; - public EmptyTypeInfoExtraInfo() - { + public EmptyTypeInfoExtraInfo() { } public static EmptyTypeInfoExtraInfo getInstance() { - if (instance == null) - { + if (instance == null) { // if instance is null, initialize instance = new EmptyTypeInfoExtraInfo(); } @@ -39,8 +36,15 @@ public static EmptyTypeInfoExtraInfo getInstance() { } @Override - public String toString() - { + public String toString() { return "EmptyTypeInfoExtraInfo{}"; } + + @Override + public boolean equals(Object o) { + if (!(o instanceof EmptyTypeInfoExtraInfo)) { + return false; + } + return true; + } } diff --git a/src/main/java/com/redhat/red/build/koji/model/json/FileExtraInfo.java b/src/main/java/com/redhat/red/build/koji/model/json/FileExtraInfo.java index d0d16ed..f4726df 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/FileExtraInfo.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/FileExtraInfo.java @@ -153,7 +153,7 @@ else if ( getNpmExtraInfo() != null ) { return "FileExtraInfo{" + "npmExtraInfo=" + npmExtraInfo + "}"; } - else if ( getMavenExtraInfo() != null ) + else if ( getTypeInfo() != null ) { return "FileExtraInfo{" + "typeInfo=" + typeInfo + "}"; } diff --git a/src/test/java/com/redhat/red/build/koji/model/json/AbstractJsonTest.java b/src/test/java/com/redhat/red/build/koji/model/json/AbstractJsonTest.java index ec498a4..27a9efc 100644 --- a/src/test/java/com/redhat/red/build/koji/model/json/AbstractJsonTest.java +++ b/src/test/java/com/redhat/red/build/koji/model/json/AbstractJsonTest.java @@ -16,6 +16,7 @@ package com.redhat.red.build.koji.model.json; import com.redhat.red.build.koji.model.json.util.KojiObjectMapper; +import com.redhat.red.build.koji.model.xmlrpc.KojiBtype; import org.commonjava.atlas.maven.ident.ref.SimpleProjectVersionRef; import java.util.Arrays; @@ -42,6 +43,11 @@ protected BuildSource newBuildSource() } protected BuildDescription newBuildDescription() + throws VerificationException { + return newBuildDescription(KojiBtype.maven); + } + + protected BuildDescription newBuildDescription(KojiBtype type) throws VerificationException { Calendar cal = Calendar.getInstance(); @@ -56,12 +62,18 @@ protected BuildDescription newBuildDescription() cal.setTime( new Date() ); cal.set( Calendar.MILLISECOND, 0 ); - BuildDescription src = builder.withEndTime( cal.getTime() ) + switch (type) { + case maven: + builder.withMavenInfoAndType(mainGav); + break; + case rpm: + builder.withRpmInfoAndType(mainGav); + break; + } + + return builder.withEndTime( cal.getTime() ) .withBuildSource( newBuildSource() ) .build(); - - src.setExtraInfo( new BuildExtraInfo( mainGav ) ); - return src; } protected BuildHost newBuildHost() diff --git a/src/test/java/com/redhat/red/build/koji/model/json/KojiImportTest.java b/src/test/java/com/redhat/red/build/koji/model/json/KojiImportTest.java index ca781ec..2e4d68f 100644 --- a/src/test/java/com/redhat/red/build/koji/model/json/KojiImportTest.java +++ b/src/test/java/com/redhat/red/build/koji/model/json/KojiImportTest.java @@ -15,12 +15,15 @@ */ package com.redhat.red.build.koji.model.json; +import com.redhat.red.build.koji.model.xmlrpc.KojiBtype; +import org.commonjava.atlas.maven.ident.ref.SimpleProjectVersionRef; import org.junit.Test; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.List; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; @@ -32,7 +35,7 @@ public class KojiImportTest extends AbstractJsonTest { @Test - public void jsonRoundTrip() + public void jsonRoundTripMaven() throws VerificationException, IOException { KojiImport info = new KojiImport( KojiJsonConstants.DEFAULT_METADATA_VERSION, newBuildDescription(), @@ -48,4 +51,34 @@ public void jsonRoundTrip() assertThat( out.getBuild(), equalTo( info.getBuild() ) ); } + @Test + public void jsonRoundTripRpm() + throws VerificationException, IOException + { + BuildOutput rpm = new BuildOutput.Builder( 1001, "apache-sshd-2.14.0-3.redhat_00005.1.el8eap.noarch.rpm" ).withArch( StandardArchitecture.noarch ) + .withChecksum( "md5", "aaffddcceeddaa" ) + .withFileSize( 12345 ) + .withRpmInfoAndType() + .build(); + BuildOutput srcRpm = new BuildOutput.Builder( 1001, "apache-sshd-2.14.0-3.redhat_00005.1.el8eap.src.rpm" ).withArch( StandardArchitecture.src ) + .withChecksum( "md5", "aaffddcceeddab" ) + .withFileSize( 123456 ) + .withRpmInfoAndType() + .build(); + List outputs = new ArrayList<>(); + outputs.add(rpm); + outputs.add(srcRpm); + outputs.add(newLogOutput( 1001, "build.log" ) ); + + KojiImport info = new KojiImport( KojiJsonConstants.DEFAULT_METADATA_VERSION, newBuildDescription(KojiBtype.rpm), + Collections.singletonList( newBuildRoot() ), + outputs); + + String json = mapper.writeValueAsString( info ); + System.out.println( json ); + + KojiImport out = mapper.readValue( json, KojiImport.class ); + + assertThat( out.getBuild(), equalTo( info.getBuild() ) ); + } } From 7c81d52c5dabf4a3549e7cc1da084d1999cf9b2c Mon Sep 17 00:00:00 2001 From: Nick Cross Date: Mon, 14 Jul 2025 15:25:34 +0100 Subject: [PATCH 4/4] NCL-9197 Use separate empty classes for npm and rpm typeinfoextrainfo --- .../koji/model/json/BuildDescription.java | 4 ++-- .../build/koji/model/json/BuildOutput.java | 2 +- .../model/json/EmptyTypeInfoExtraInfo.java | 16 +++------------- .../koji/model/json/NpmTypeInfoExtraInfo.java | 19 +++++++++++++++++++ .../koji/model/json/RpmTypeInfoExtraInfo.java | 19 +++++++++++++++++++ .../koji/model/json/TypeInfoExtraInfo.java | 16 ++++++++-------- 6 files changed, 52 insertions(+), 24 deletions(-) create mode 100644 src/main/java/com/redhat/red/build/koji/model/json/NpmTypeInfoExtraInfo.java create mode 100644 src/main/java/com/redhat/red/build/koji/model/json/RpmTypeInfoExtraInfo.java diff --git a/src/main/java/com/redhat/red/build/koji/model/json/BuildDescription.java b/src/main/java/com/redhat/red/build/koji/model/json/BuildDescription.java index 6d1dcf3..7b520a3 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/BuildDescription.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/BuildDescription.java @@ -274,7 +274,7 @@ public Builder withRpmInfoAndType(ProjectVersionRef gav ) { target.extraInfo.setTypeInfo( new TypeInfoExtraInfo() ); } - target.extraInfo.getTypeInfo().setRpmTypeInfoExtraInfo( EmptyTypeInfoExtraInfo.getInstance() ); + target.extraInfo.getTypeInfo().setRpmTypeInfoExtraInfo( RpmTypeInfoExtraInfo.getInstance() ); return this; } @@ -295,7 +295,7 @@ public Builder withNpmInfoAndType( NpmPackageRef nv ) { target.extraInfo.setTypeInfo( new TypeInfoExtraInfo() ); } - target.extraInfo.getTypeInfo().setNpmTypeInfoExtraInfo( EmptyTypeInfoExtraInfo.getInstance() ); + target.extraInfo.getTypeInfo().setNpmTypeInfoExtraInfo( NpmTypeInfoExtraInfo.getInstance() ); return this; } diff --git a/src/main/java/com/redhat/red/build/koji/model/json/BuildOutput.java b/src/main/java/com/redhat/red/build/koji/model/json/BuildOutput.java index 363df67..1e8097d 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/BuildOutput.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/BuildOutput.java @@ -276,7 +276,7 @@ public Builder withNpmInfoAndType( NpmPackageRef ref ) target.outputType = StandardOutputType.npm.getName(); NpmExtraInfo npmExtraInfo = new NpmExtraInfo( ref.getName(), ref.getVersion().toString() ); - TypeInfoExtraInfo typeInfo = new TypeInfoExtraInfo( EmptyTypeInfoExtraInfo.getInstance() ); + TypeInfoExtraInfo typeInfo = new TypeInfoExtraInfo( NpmTypeInfoExtraInfo.getInstance() ); target.extraInfo = new FileExtraInfo( npmExtraInfo, typeInfo ); return this; diff --git a/src/main/java/com/redhat/red/build/koji/model/json/EmptyTypeInfoExtraInfo.java b/src/main/java/com/redhat/red/build/koji/model/json/EmptyTypeInfoExtraInfo.java index 9ecd62a..bf8c099 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/EmptyTypeInfoExtraInfo.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/EmptyTypeInfoExtraInfo.java @@ -15,26 +15,14 @@ */ package com.redhat.red.build.koji.model.json; -import org.commonjava.rwx.anno.StructPart; - /** * Created by pkocandr on 06/22/21 */ -@StructPart -public class EmptyTypeInfoExtraInfo { - private static EmptyTypeInfoExtraInfo instance; +abstract public class EmptyTypeInfoExtraInfo { public EmptyTypeInfoExtraInfo() { } - public static EmptyTypeInfoExtraInfo getInstance() { - if (instance == null) { - // if instance is null, initialize - instance = new EmptyTypeInfoExtraInfo(); - } - return instance; - } - @Override public String toString() { return "EmptyTypeInfoExtraInfo{}"; @@ -48,3 +36,5 @@ public boolean equals(Object o) { return true; } } + + diff --git a/src/main/java/com/redhat/red/build/koji/model/json/NpmTypeInfoExtraInfo.java b/src/main/java/com/redhat/red/build/koji/model/json/NpmTypeInfoExtraInfo.java new file mode 100644 index 0000000..cfef622 --- /dev/null +++ b/src/main/java/com/redhat/red/build/koji/model/json/NpmTypeInfoExtraInfo.java @@ -0,0 +1,19 @@ +package com.redhat.red.build.koji.model.json; + +import org.commonjava.rwx.anno.StructPart; + +@StructPart +public class NpmTypeInfoExtraInfo extends EmptyTypeInfoExtraInfo { + protected static NpmTypeInfoExtraInfo instance; + + public NpmTypeInfoExtraInfo() { + } + + public static NpmTypeInfoExtraInfo getInstance() { + if (instance == null) { + // if instance is null, initialize + instance = new NpmTypeInfoExtraInfo(); + } + return instance; + } +} diff --git a/src/main/java/com/redhat/red/build/koji/model/json/RpmTypeInfoExtraInfo.java b/src/main/java/com/redhat/red/build/koji/model/json/RpmTypeInfoExtraInfo.java new file mode 100644 index 0000000..b27d561 --- /dev/null +++ b/src/main/java/com/redhat/red/build/koji/model/json/RpmTypeInfoExtraInfo.java @@ -0,0 +1,19 @@ +package com.redhat.red.build.koji.model.json; + +import org.commonjava.rwx.anno.StructPart; + +@StructPart +public class RpmTypeInfoExtraInfo extends EmptyTypeInfoExtraInfo { + protected static RpmTypeInfoExtraInfo instance; + + public RpmTypeInfoExtraInfo() { + } + + public static RpmTypeInfoExtraInfo getInstance() { + if (instance == null) { + // if instance is null, initialize + instance = new RpmTypeInfoExtraInfo(); + } + return instance; + } +} diff --git a/src/main/java/com/redhat/red/build/koji/model/json/TypeInfoExtraInfo.java b/src/main/java/com/redhat/red/build/koji/model/json/TypeInfoExtraInfo.java index 9e742f5..47a52aa 100644 --- a/src/main/java/com/redhat/red/build/koji/model/json/TypeInfoExtraInfo.java +++ b/src/main/java/com/redhat/red/build/koji/model/json/TypeInfoExtraInfo.java @@ -50,11 +50,11 @@ public class TypeInfoExtraInfo @JsonProperty( NPM_TYPE_INFO ) @DataKey( NPM_TYPE_INFO ) - private EmptyTypeInfoExtraInfo npmTypeInfoExtraInfo; + private NpmTypeInfoExtraInfo npmTypeInfoExtraInfo; @JsonProperty( RPM ) @DataKey( RPM ) - private EmptyTypeInfoExtraInfo rpmTypeInfoExtraInfo; + private RpmTypeInfoExtraInfo rpmTypeInfoExtraInfo; @JsonProperty( IMAGE_INFO ) @DataKey( IMAGE_INFO ) @@ -66,7 +66,7 @@ public class TypeInfoExtraInfo @JsonCreator public TypeInfoExtraInfo( @JsonProperty( REMOTE_SOURCE_FILE ) RemoteSourceFileExtraInfo sourceFileInfo, - @JsonProperty( NPM_TYPE_INFO ) EmptyTypeInfoExtraInfo npm, + @JsonProperty( NPM_TYPE_INFO ) NpmTypeInfoExtraInfo npm, @JsonProperty( REMOTE_SOURCES ) List remoteSourcesExtraInfo ) { this.remoteSourceFileExtraInfo = sourceFileInfo; @@ -80,7 +80,7 @@ public TypeInfoExtraInfo( @JsonProperty( REMOTE_SOURCES ) List