Open cvilleret opened 6 years ago
J'ai essayé de créer un cas de reproduction. Avec le code ci-dessous, j'ai l'erreur suivante:
{
"message": "Can not deserialize instance of java.lang.String out of START_OBJECT token"
}
S'agit-il bien de ce que tu as observé ?
Le test:
import spock.lang.Shared
import spock.lang.Specification
import com.vsct.dt.hesperides.jenkins.pipelines.Hesperides
import com.vsct.dt.hesperides.jenkins.pipelines.http.HTTPBuilderRequester
class BugRepro extends Specification implements Helper {
static final ENV = System.properties
@Shared
Hesperides hesperides = new Hesperides(apiRootUrl: "${ENV.HESPERIDES_HOST}:${ENV.HESPERIDES_PORT}",
auth: ENV.HESPERIDES_AUTH,
httpRequester: new HTTPBuilderRequester())
static applicationName = 'PAO'
static platformName = 'INT2'
static moduleName = 'houston-connector-pao-jar'
static logicGroupName = 'HCO'
static subLogicGroup = 'JAR'
static instanceName = 'DUMMY'
static moduleVersion = '2.0.0.0'
def setupSpec() {
log "${ENV.HESPERIDES_AUTH}@${ENV.HESPERIDES_HOST}:${ENV.HESPERIDES_PORT}"
hesperides.createPlatform(app: applicationName, platform: platformName, version: '1.0.0.0')
hesperides.createModule(moduleName: moduleName, version: moduleVersion)
hesperides.putModuleOnPlatform(app: applicationName,
platform: platformName,
moduleName: moduleName,
moduleVersion: moduleVersion,
isWorkingCopy: true,
logicGroupPath: "#${logicGroupName}#${subLogicGroup}")
hesperides.createInstance(app: applicationName, platform: platformName, moduleName: moduleName, instance: instanceName, path: "#${logicGroupName}#${subLogicGroup}")
}
def cleanupSpec() {
hesperides.deletePlatform(app:applicationName, platform: platformName)
hesperides.deleteModule(moduleName: moduleName, version: moduleVersion, moduleType: 'workingcopy')
}
def "Can update new properties"() {
when:
def jsonProperties = """
{
"path:#HCO#JAR#houston-connector-pao-jar": {
"streams.ticket-mark.accept-delay-days-to-midnight": "1",
"iterable_properties": {
"pao.kafka.consumer.kafka-clients.bootstraps.servers": [
{
"pao.kafka.consumer.kafka-clients.bootstrap.server.id": "int-2",
"pao.kafka.consumer.kafka-clients.bootstrap.server.value": "localhost:50000"
}
]
}
}
}
"""
File jsonFile = new File('jsonProperties')
jsonFile.text = jsonProperties
hesperides.updateProperties(app: applicationName,
platform: platformName,
jsonPropertyUpdates: jsonFile.path,
commitMsg: 'hesperides-jenkins-lib Spock tests')
jsonFile.delete()
def modulePropertiesPath = "#${logicGroupName}#${subLogicGroup}#${moduleName}#${moduleVersion}#WORKINGCOPY"
def platformProps = hesperides.getModulePropertiesForPlatform(app: applicationName, platform: platformName, modulePropertiesPath: modulePropertiesPath)
def globalProps = hesperides.getModulePropertiesForPlatform(app: applicationName, platform: platformName, modulePropertiesPath: '#')
def instanceProps = hesperides.getInstanceProperties(app: applicationName, platform: platformName, moduleName: moduleName, instance: instanceName)
then:
platformProps['iterable_properties'].size() > 0
platformProps['iterable_properties'].find {
it.name == 'pao.kafka.consumer.kafka-clients.bootstraps.servers'
}
platformProps['iterable_properties'].find {
it.name == 'pao.kafka.consumer.kafka-clients.bootstraps.servers'
}['iterable_valorisation_items'].size() > 0
platformProps['iterable_properties'].find {
it.name == 'pao.kafka.consumer.kafka-clients.bootstraps.servers'
}['iterable_valorisation_items'][0]['values'].find {
it.name == 'pao.kafka.consumer.kafka-clients.bootstrap.server.id'
}['value'] == 'int-2'
}
def log(msg) {
System.out.println msg
}
}
Gwendal J. a eu le même souci, voici un extrait des logs:
Response Code: HTTP/1.1 400 Bad Request
Success code from [100‥600]
[Pipeline] echo
[31m[message:Can not deserialize instance of java.lang.String out of START_OBJECT token][0m
Il a mis le doigt sur le bug je crois:
les iterables properties se retouvent dans iterable_properties à la racine et dans key_value_properties
Je prends le point aujourd'hui.
Bonjour, lorsqu'on injecte les properties via la lib groovy, 3 comportements ont été vu sur les properties itératives : 1 - quand on push les properties avec un json du type :
cela supprime les itérative, on est obligé de les indiquer a chaque json de diff de properties.
2 - quand on push les properties avec une notion de path :
Là il y a conservation des itératives, ce qui est un comportement plutot attendu.
3 - lorsqu'on tente de push des properties itérative avec la notion de path :
Là la lib groovy nous balance qu'il n'arrive pas a déserializer.
Pour le moment pour le pas pourrir les iterative je passe uniquement par le path.