#! /usr/bin/env python

# Spot checks some published artifacts to be sure that they uploaded correctly
# to the release repository

import requests
import sys
import sha
import os


from requests.auth import HTTPBasicAuth

if len(sys.argv) != 4:
    print "usage: check-uploaded-maven-artifact version buildRoot repoRoot"
    sys.exit(1)

version = sys.argv[1]
buildRoot = sys.argv[2]
repoRoot = sys.argv[3]

def checkArtifact(localPath, remoteUrl):

    repoResponse = requests.head(remoteUrl)

    if repoResponse.status_code != 200:
        print 'Cannot find jar file artifact at ' + remoteUrl
        print repoResponse.text
        sys.exit(1)

    remoteSize = int(repoResponse.headers['content-length'])
    etag = repoResponse.headers['etag']

    localSize = os.path.getsize(localPath)

    localArtifact = open(localPath)
    localArtifactSha = sha.new(localArtifact.read())
    expectedSha1 = localArtifactSha.hexdigest()

    if localSize != remoteSize:
        print 'Size for ' + remoteUrl + ' is wrong local ' + str(localSize) + ' but found remote ' + str(remoteSize)
        sys.exit(1)

    sha1 = ''
    if '{SHA1{' in etag:
        # this is a sonatype style artifact
        sha1 = etag[7:len(etag)-3]
    else:
        sha1 = repoResponse.headers['x-checksum-sha1']

    if sha1 != expectedSha1:
        print 'SHA1 hash is wrong for ' + remoteUrl + ' expected ' + \
              expectedSha1 + ' but found ' + sha1
        sys.exit(1)

def checkArtifactsForComponent(version, name, component, buildRoot, repoRoot):
    localArtifactRootPath = buildRoot + '/buck-out/gen/' + component
    localArtifactJarPath = localArtifactRootPath + '/lib__' + name + '__output/' + name + '.jar'
    localArtifactJavadocPath = localArtifactRootPath + '/' + name + '#javadoc,maven-sources.jar'
    localArtifactSourcesPath = localArtifactRootPath + '/' + name + '#maven,src-sources.jar'

    remoteArtifactBaseUrl = repoRoot + '/org/onosproject/' + name + '/' + version + '/' + name + '-' + version
    remoteArtifactJarUrl = remoteArtifactBaseUrl + '.jar'
    remoteArtifactJavadocUrl = remoteArtifactBaseUrl + '-javadoc.jar'
    remoteArtifactSourcesUrl = remoteArtifactBaseUrl + '-sources.jar'

    checkArtifact(localArtifactJarPath, remoteArtifactJarUrl)
    checkArtifact(localArtifactJavadocPath, remoteArtifactJavadocUrl)
    checkArtifact(localArtifactSourcesPath, remoteArtifactSourcesUrl)

checkArtifactsForComponent(version, 'onos-api', 'core/api', buildRoot, repoRoot)
checkArtifactsForComponent(version, 'onos-protocols-openflow-api', 'protocols/openflow/api', buildRoot, repoRoot)
checkArtifactsForComponent(version, 'onos-core-serializers', 'core/store/serializers', buildRoot, repoRoot)
checkArtifactsForComponent(version, 'onos-cli', 'cli', buildRoot, repoRoot)
checkArtifactsForComponent(version, 'onos-apps-optical-model', 'apps/optical-model', buildRoot, repoRoot)




