удаленный Jacoco: невозможно создать дамп данных покрытия: неожиданно закрыто гнездо - PullRequest
0 голосов
/ 18 октября 2019

Я интегрирую код покрытия Jacoco для удаленных тестов. Я настроил плагин jacoco maven на моей локальной машине и агент jacoco на удаленной машине.

Когда я запускаю тесты с помощью этой команды:

mvn clean jacoco:prepare-agent jacoco:report install```

после завершения тестов у меня есть исключение закрытого сокета

**[INFO] --- jacoco-maven-plugin:0.8.2:dump (default) @ server ---
[INFO] Connecting to /139.XX.XX.XX:32082**


[ERROR] Failed to execute goal org.jacoco:jacoco-maven-plugin:0.8.2:dump
(default) on project server: Unable to dump coverage data: Socket closed unexpected

У меня есть jacoco.exec и тестовые файлысгенерировано локально ... но это не было правильно завершено, поскольку jacoco.xml не существует, поэтому я не могу видеть данные покрытия.

К вашему сведению, удаленная машина - это кластер kubernetes

Я добавил агент jacoco в образ докера моего приложения, работающего внутри кластера, и открыл службу из кластера (соединение было правильно установлено какмы можем видеть в журналах), и настроил мой jvm с jacoco, используя команду ниже. Я использую сервис входа для моего запроса теста https.

**jvmOptions="-javaagent:/tmp/jacoco-agent.jar=output=tcpserver,address=*,port=32082"** 

ниже моих значений yamls для входа и конфигурации моего приложения:

controller:
  TcpServiceConfigMapNoNamespace: false
  UdpServiceConfigMapNoNamespace: false
  bindAddress: ""
  config: {}
  defaultBackendService: kube-system/default-http-backend
  defaultSSLCertificate: ""
  disableIvp6: false
  electionID: ingress-controller-leader
  extraArgs: {}
  hostNetwork: true
  httpRedirectCode: ""
  imagePullPolicy: IfNotPresent
  imageRepo: nginx
  imageTag: 1.14.0-5.10
  ingressClass: nginx
  kind: DaemonSet
  name: controller
  nodeSelector:
    is_edge: "true"
  podAnnotations: {}
  podLabels: {}
  publishService:
    enabled: false
    pathOverride: ""
  replicaCount: 1
  resources:
    limits:
      cpu: 500m
      memory: 512Mi
    requests:
      cpu: 250m
      memory: 256Mi
  reusePort: true
  scope:
    enabled: false
    namespace: ""
  securityContextPrivileged: false
  service:
    annotations: {}
    clusterIP: None
    enabled: true
    externalIPs: []
    externalTrafficPolicy: ""
    healthCheckNodePort: 0
    loadBalancerIP: ""
    loadBalancerSourceRanges: []
    nodePorts:
      http: ""
      https: ""
    targetPorts:
      http: 80
      https: 443
    type: ClusterIP
  tolerations:
  - effect: NoExecute
    key: is_edge
    operator: Equal
    value: "true"
  updateStrategy:
    rollingUpdate:
      maxUnavailable: 1
    type: RollingUpdate
  workerProcessAsRoot: false
defaultBackend:
  enabled: true
  extraArgs: {}
  imagePullPolicy: IfNotPresent
  imageRepo: xxxx
  imageTag: "1.3"
  name: default-backend
  nodeSelector: {}
  podAnnotations: {}
  podLabels: {}
  replicaCount: 1
  resources:
    limits:
      cpu: 10m
      memory: 32Mi
    requests:
      cpu: 10m
      memory: 32Mi
  service:
    annotations: {}
    clusterIP: ""
    externalIPs: []
    loadBalancerIP: ""
    loadBalancerSourceRanges: []
    servicePort: 80
    type: ClusterIP
  tolerations: []
global:
  registry: xxx
rbac:
  create: true
  serviceAccountName: default
tcp: {}
udp: {}

и это значения моего приложения:

address: '*'
devHostPathMounts:
global:
  registry: xxx
image:
  name: xxx
  tag: latest
infra: false
ingress:
  annotations:
    ingress.kubernetes.io/proxy-read-timeout: "600"
    ingress.kubernetes.io/proxy-send-timeout: "600"
    ingress.kubernetes.io/secure-backends: "true"
    ingress.kubernetes.io/ssl-redirect: "false"
  enabled: true
jvmOptions: -javaagent:/tmp/jacoco-agent.jar=output=tcpserver
    server: ""
liveness: false
maxUnavailable: 0
nodeSelector:
  is_control: "true"
port: 32082
rbac: true
readiness: false
replicas: 1
resources:
  limits:
    cpu: 2
    memory: 512Mi
  requests:
    cpu: 1
    memory: 164Mi
service:
  httpPort: 8443
  name: xxxx
  type: ClusterIP
tolerations:
- operator: Exists

Я использую также yaml restshell:

extraHostPathMounts:
- hostPath: /root/.kube
  mountPath: /root/.kube
  name: kube-dir
  readOnly: true
- hostPath: /etc/kubernetes
  mountPath: /etc/kubernetes
  name: kube-etc
  readOnly: true
- hostPath: /etc/sysconfig
  mountPath: /etc/sysconfig
  name: sysconfig-etc
  readOnly: true
- hostPath: /usr/local/sbin
  mountPath: /usr/local/sbin
  name: bin-dir
  readOnly: true
- hostPath: /usr/local/bin
  mountPath: /usr/local/bin
  name: localbin-dir
  readOnly: true
- hostPath: /root/.helm
  mountPath: /root/.helm
  name: helm-dir
  readOnly: false
image:
  pullPolicy: IfNotPresent
  tag: 18.03
ingress:
  annotations:
    ingress.kubernetes.io/proxy-read-timeout: "600"
    ingress.kubernetes.io/proxy-send-timeout: "600"
    ingress.kubernetes.io/rewrite-target: /
    ingress.kubernetes.io/secure-backends: "true"
    ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/secure-backends: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
  enabled: true
  path: /shell/
  sso: false
liveness: true
maxUnavailable: 0
rbac: true
readiness: true
registry: xxx.com
secure: true
service:
  httpPort: 9091
  name: restshell
  type: ClusterIP
token: token
...