我使用 go-sqlmock (https://godoc.org/github.com/DATA-DOG/go-sqlmock)来测试接收可变数量参数的函数(为了简单起见,我简化了该函数并去掉了大部分代码):
func getHits(db *sql.DB, actions ...string) (hits []Hit, err error) {
// ...
query := `select * from table where action in (?,?)`
rows, err := db.Query(query, actions)
// ...
}
Run Code Online (Sandbox Code Playgroud)
测试看起来像这样:
// rows := ...
actions := []string{"click", "event"}
mock.ExpectQuery(`^select .*`).WithArgs(actions).WillReturnRows(rows)
hits, err := getHits(db, actions...)
if mockErr := mock.ExpectationsWereMet(); mockErr != nil {
log.Fatalf("there were unfulfilled expections: %s", mockErr)
}
Run Code Online (Sandbox Code Playgroud)
然后我得到这个输出:
2017/12/21 10:38:23 there were unfulfilled expections: there is a remaining expectation which was …Run Code Online (Sandbox Code Playgroud) 对于如何计算XAdES签名中SignedProperties元素的摘要,我已经进行了几天的努力。我有一个参考XML文件,其中计算了两个摘要值(正在签名的文件和已签名的属性),我知道它很好,因为它通过了验证程序。我为要签名的文件计算了正确的摘要值,但是无论将什么作为摘要方法的输入(我使用OpenSSL),我都无法获得与参考文件相同的值。当然,我自己的文件此后不会通过验证程序。我使用以下命令来计算摘要:
openssl dgst -sha256 -binary myfile.xml | openssl base64
Run Code Online (Sandbox Code Playgroud)
我通过提取参考文件的SignedProperties元素记录了文件myfile.xml并按原样保存。
<xades:SignedProperties Id="xmldsig-f6a6a2a1-87af-4720-8eed-cf4532e99106-signedprops"><xades:SignedSignatureProperties><xades:SigningTime>2015-09-22T09:02:48.624+02:00</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><ds:DigestValue>cAJECbIzXZiLH+ILWPrM5jfA13GKcEC8t1qe7/BxqBM=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>CN=thawte SHA256 Code Signing CA,O=thawte\, Inc.,C=US</ds:X509IssuerName><ds:X509SerialNumber>13010307134774063901853305426952669967</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate></xades:SignedSignatureProperties><xades:SignedDataObjectProperties><xades:DataObjectFormat ObjectReference="#xmldsig-f6a6a2a1-87af-4720-8eed-cf4532e99106-ref0"><xades:Description>signature détachée du fichier indexfile.txt</xades:Description><xades:MimeType>text/plain</xades:MimeType></xades:DataObjectFormat></xades:SignedDataObjectProperties></xades:SignedProperties></xades:SignedProperties>
Run Code Online (Sandbox Code Playgroud)
显然,我应该得到的价值:
6JK3GHDL25+EIRefNMQJ3SOGSI8uzQ45PiziMomZkYs=
Run Code Online (Sandbox Code Playgroud)
但是我不明白。我不知道是否必须进行一些转换或规范化,关于这部分的说明非常模糊。它以UTF-8编码,没有换行符。
有人怎么做吗?有什么把戏吗?