Promtail: update certificates used for syslog’s tests (#6534)

All the certificates now have a 20 year lifetime.

This reverts commit 2fc20af9a4.
pull/6545/head
Johan Fleury 3 years ago committed by GitHub
parent 33761194d9
commit 9b980c45ed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 944
      clients/pkg/promtail/targets/syslog/syslogtarget_test.go

@ -1,8 +1,11 @@
package syslog
import (
"crypto/tls"
"crypto/x509"
"fmt"
"io"
"io/ioutil"
"net"
"os"
"testing"
@ -22,213 +25,270 @@ import (
"github.com/grafana/loki/clients/pkg/promtail/targets/syslog/syslogparser"
)
//var (
// caCert = []byte(`
//-----BEGIN CERTIFICATE-----
//MIIFDTCCAvWgAwIBAgIRAKybTDGpnijNRJOBzgQCurIwDQYJKoZIhvcNAQELBQAw
//IDEeMBwGA1UEAxMVUHJvbXRhaWwgVGVzdCBSb290IENBMB4XDTIxMDYyNzE2NTMz
//MloXDTI2MDYyNjE2NTMzMlowIDEeMBwGA1UEAxMVUHJvbXRhaWwgVGVzdCBSb290
//IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2tNN84TdJJ1olhPL
//zpXJLKUxHEmZ41+2SGy1hzwfsM0XIXjxWIMio/n/ZVym5Yk6ZLir9+L6bUpMZTYl
//hwYHwSPQEOK1Y1Kkix++uEZP70Yg7keyW8nRWRnyZT5C0jH6jZI/k94cZUhLlDjY
//iMm8IXcLp6Dp5fBbM9/ZLb1djsZ+//9z5QS66e8UrOAmdSgjjJmMr7nLJEx0nJpC
//xQHsoKrvmGQ4dy3ro2fINioaHPq5ujk2wAEu0XnkQAjZkpmXcTmAnNaWJswQks/Z
//Dqp5Oh2EiwO6aN88fauM7Xb/emwY+u1hyk5HSNuxbpOOUrx939HUgqIka4bsWbK0
//GwFlvuzrWP2f4hIIfcMoEVC+oGW3NfgD2drq+dBrmfRGXpSxBNrUwCvU8cweDe/3
//xAeI1fjB8JNMcyWWblHG5YbmE4MHMNdS7eUvGrlunmCcCLSvvwbEUpMCwUof0YBI
//RLhaOFSLEFFS0qWoJwwgg45OqilgPuVAWJ+WjjzWwlu2BD8C1uUeAEJx1L0a0rp0
//3fdWmXf97AWTjC3oIZK9wkxj1dSxsEDCcrq9AHdvvpn8g5Cjr5MWteImMrHYcwe1
//Gleb46eM0PwpdkLLmok0sai/SnjDwZu0ABMr0oKz2/m+GxIL1Ebk+XMMnQacMn/8
//l0uGpY69Dx1mpXTJQiXSNq84JjECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgKkMA8G
//A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKoQ/kE3BMM/QA3BcF0zqNDSfLf1MA0G
//CSqGSIb3DQEBCwUAA4ICAQBIpihcbcsRSilMENFkBpbKqlHK3FmNPhxbMSVp5uFy
///Ke5hS5rg+IDW/0KHCM2QXjEs0ZreOzbc+4/jHDa+bzZW2cBqPf7yISoE6c0uZ4d
//mMxTRtSJbD6PG2hvlkD8M+I+bq0BP677PRblfw/ASGaQzy4SBSnVRXPlMohe91zT
//ArI7N0nEfHzTi+wEhHXJi++qLO4WRXZnZKfAvJ54qbyRMZSZXV3VvVmZYfKT1MuF
//WhNJDR0lIjr2Er5q807ev1556mjiq5vwu1dFmIGX8IIb9gjjyrZYvr1Sh3h8RVZh
//mW0MlmWf5/tQ5JvKQw44F7ynBEYt1C2i+hQsfFO9cfGXtU3PKnoFjxZ7dDpy8hK2
//91qhkUf9B29tX2Dm/fd0BknoS7t8bOVDls0sGAsmg4EEEIdFUdKn/0vQx67Cog33
//GOIfFHujBC7LI+HUu/NpAp1V/hnqm8R6DQSntITJWTICklEZfbTowq2bdcjDUILL
//YU4QdgyJHGetIOAabUzV74Q7WQ/1YiihSDGLbykQ03bYP5B+rkkF3/eSVwZMzMll
//olUQe0fCwHF8n4imr77F/1U/s3ODKPuRB9hr7zqsboDK7OzjiJoFlPIjmA6tCVlJ
//6JAHwLVqTztdUTwkc9bMY3ieIIfyLIaJ7wq4igbL33SCYl3Yxwj3ZA9sj3zrUoIu
//ig==
//-----END CERTIFICATE-----
//`)
//
// serverCert = []byte(`
//-----BEGIN CERTIFICATE-----
//MIIFWDCCA0CgAwIBAgIRANu9qwosWKYNIYxSVbBJla8wDQYJKoZIhvcNAQELBQAw
//IDEeMBwGA1UEAxMVUHJvbXRhaWwgVGVzdCBSb290IENBMB4XDTIxMDYyNzE2NTY1
//NVoXDTIyMDYyNzE2NTY1NVowKzEpMCcGA1UEAxMgUHJvbXRhaWwgVGVzdCBTZXJ2
//ZXIgQ2VydGlmaWNhdGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDV
//fb1d5g4v7yVlFI/wvuDV8RirmY7bYtLa/z7lk8QYlVB2fA2K8PGk+zd/O2wTjYGf
//Zn8Q3ttW9HGFYJSsi1Jel57ANW6vToPy3u2fmwjOUWiRvYVcl8rz32sdmUYx8wyV
//nb89bFV3lW0vIHQljmd2z9sL/xHY7ZkViZ4+cd5OnHm3Y46ZKmtmIPHyPiHKGGT9
//d53k2ooIsZ3PjVGU4hwfKwfYQ982hBXWGEbv6LjNGuKP+0JqCbgFOfurHd25xXTL
//yzFaICVjXjIm5AriGmpSIWpg3YIEl/Jbe70MhWpSw18SjawEHCES+e2jZgqQ/QcZ
//uk+fy8zv4PRnunoiSEWyQm+G0ajkaW1gQRIAtlHNth1M8PHgVinZE+ghu5a7UJuN
//dT4/UH+Bwzin7NfIjmZAIbIq9xW+OreMGF3K83DPmg96DUQbyMyx0q49DSBmAtHl
//Mb/uvy2AKfIQRZgxi0In167zHTcev7L8/kFbJVn55r7IURK7gjp/iyplC2zI24Tr
//+DeqTT3+r3BTn4x+4HIa+sK6BrLq0kLDBgksOYTv0ilJp4JDv4YT4/FUSGLt6uA4
//CjHL0SLX3nnYM66bx2wwFB0OkJPtfo1h0X/YafNDoDKrZ9BmOn18BTSxV3utyiEG
//UAnNSqzGTTLu29uHQ3dkdmrXNdwYZVzpz5kE2DmGswIDAQABo4GBMH8wDgYDVR0P
//AQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMB
//Af8EAjAAMB8GA1UdIwQYMBaAFKoQ/kE3BMM/QA3BcF0zqNDSfLf1MB8GA1UdEQQY
//MBaCFHByb210YWlsLmV4YW1wbGUuY29tMA0GCSqGSIb3DQEBCwUAA4ICAQAbnorG
//nvMi46fC9gVUDMBLsQluVb26rU+OV1usSjkRzW16c1FTJJriGIRSmkK1irH9Ff9e
//GFowpvEMGDKBHNcMlbjxfHyThfFYI+v5J77NaytN4v4vJhhF1tFfqkI19YUCcZYQ
//lcMnV5IAKh3r+fYRmHm3ey1WV96eHApzXui4+kUeEWiUN+x0J5ApTRFasqFArLVw
//3c0ARaW0jkixl01qLt2VzpDP/GLwK/2wl+n0LSFHyQUeZpY69DR5H2tFgCvc6n4B
//qJwy5AesMdxefnIjuRELcG1sjaybB7j5YghadzR2xMLtz2iCCXtBdcKH6x+GTj1O
//PQo5Jm3//5b9rwIZl0EQnnXwWrHrIw5nbBX7gbQ2FNqdrHyj/uy3WcxaLhNrEadC
//muB9cCov3U0McqDbUdZG0ZhZhrAqbiCHwJY2BOPVLsl/lP0pHI//DOLXMyHSaFDW
//dFoUL/fAn7ZNhLATf7sRYFlPwmiO2VTrVzJ7+Ak8RW9c3L598RHvM3KGXC0ahHr2
//hnOrHYYiJK5tZL1kGNrokmww5n1L2mkALqCH9eSztHJFt9VGpGkrCd+3hI1GpuE2
//4z2QFaE6vVC7GxxmnQChIVRZS8KGuDQ4uPkTcnnVlOPxawquVY05e2lxdJBItgVQ
//Wu4omM2NavzTD8mlK74W7B8qKq+NMHGxAUEmHg==
//-----END CERTIFICATE-----
//`)
//
// serverKey = []byte(`
//-----BEGIN RSA PRIVATE KEY-----
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
//-----END RSA PRIVATE KEY-----
//`)
// clientCert = []byte(`
//-----BEGIN CERTIFICATE-----
//MIIFNTCCAx2gAwIBAgIQLcRrnKNMcTvcPl93lSKsnjANBgkqhkiG9w0BAQsFADAg
//MR4wHAYDVQQDExVQcm9tdGFpbCBUZXN0IFJvb3QgQ0EwHhcNMjEwNjI3MTY1NjU5
//WhcNMjIwNjI3MTY1NjU5WjArMSkwJwYDVQQDEyBQcm9tdGFpbCBUZXN0IENsaWVu
//dCBDZXJ0aWZpY2F0ZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANAo
//OvLXU5dZGVOt8dBcVPWAWaikPK/pDLNrXAcQ+vINLpcyKd1bcRRSfYm+q8f4kKt8
//x+gWWjAtRcVvXBttKSS6834X7GhI0oH3qiKuQlha7NGBHQJeZSAPAwogS7/l8z4d
//lJOnUoLTPe/EUeCVo6WgooRunGf6UtymApJFl6i0aQo7Y6qevLSg8uWaRX8/wYPW
//HOzDZpbwdTVYpMnj1mOTcA+YF/M1QFRoBrXGL9Oan/1ecwuF37Ho8uCH0Fx98vsk
//jMThn/VnU0dRH9Jx05inuxCm/z4e3tHg0esjyY0kmum6gCdQufMdqDWHJABY2H+1
//dqvtoNIYK5gIkaRWNOWV6F5H9+kHgcKPQMfYUGPxEwDnWQ+DInYZ128Gm5bYKa81
//pFs4XY5d6TOmt00Bs28fRMOfdRi16sHTUswl/8wlx1MIHofKgEEUta8r9FqxUsIT
//duwcZ6LwPa6xDuFl30kW6I4Oa3UHUnOD6WgEL+BycNHTJBpwZLnXrq0rG5NRQS+A
//36krW2EkHavTrFE1eFmkAul4tJSw2jCiSHmenj54ycGMcU5Bn7G/wFNH8nW7ywlC
//LTdjK4goMtAJ52aPT3G/WW2bL8jlBpnL4+lWwnpfugDtckdFpXPFF9WV30nH95Yr
//813Vi1dbEOMF56E9FaUTT8eHftqzkK4ZlPmRrN+BAgMBAAGjYDBeMA4GA1UdDwEB
///wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/
//BAIwADAfBgNVHSMEGDAWgBSqEP5BNwTDP0ANwXBdM6jQ0ny39TANBgkqhkiG9w0B
//AQsFAAOCAgEAs6DQcP027wIPyIOq1UMVA2koxt6sGECgO897Z07dRIEd3/Oihc7L
//BQCGnqtjxKTC1yfvakCQHRADxos2uTt0l5If3TxLSu4Lx16Nk+ApwwMbfTd8jmXT
//tNyZTrgEcE8bJVnv/N38Ur7puJypl5S8Z9QmzNSQYGdF4f9Ngab7MOoIv/gqhVty
//X7Lk+yWom69vVOsuisSfbD+fo02Cf4jcLVCKcTwWqv10S2v1r9hjM6B9i2NkERih
//ryYViEPFdsQ36lA4Z4xs3JCYxUqAOHzASIAn1cBTZUT9tu2A3UZTK1x57IR8q583
//M0wc9/ZgGPxjLMrRbFJOFM4CX08vC482ZgdWgyQmIhMu8ama1DMje6cZN4QFo58k
//btGMdJ2jFBYCssDix9/RHG5fAdU2PrtqShwyn4TinFDPpTXr1VlON3l9mFXP0sDb
//KiZXzKtDCktaKRcBFaLgKfmrfASVZ5z/9z67A+XY+78kfbGwpDUIGFNsCtGRLq66
//kUC2qrrXgM51toJpcW5Rdm74LOAMPCQg0raCM67Ou0rPE9ucSskexB6X6oc7mkop
//JO8VEMoObWB+0ftjNsL3fUCUTyimdvieb6LIcyrzZBpcqzlfFgQ/cbbR2+P1D7s7
//rWAq4Upb+WRl6uDfmMiCgHHwketUuBEZUmkf+LT4OZcTYzv6AzL1ApA=
//-----END CERTIFICATE-----
//`)
// clientKey = []byte(`
//-----BEGIN RSA PRIVATE KEY-----
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
//-----END RSA PRIVATE KEY-----
//`)
//)
var (
caCert = []byte(`
-----BEGIN CERTIFICATE-----
MIIFDTCCAvWgAwIBAgIRAL3YFsDcKtnEWCzE0qafwlQwDQYJKoZIhvcNAQELBQAw
IDEeMBwGA1UEAxMVUHJvbXRhaWwgVGVzdCBSb290IENBMB4XDTIyMDYyOTA4MTQy
MFoXDTQyMDYyOTA4MTQyMFowIDEeMBwGA1UEAxMVUHJvbXRhaWwgVGVzdCBSb290
IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1wHnEwW3Gc1Q3v4F
BgFL9N2rayHA7yFqViEwG8AiliaCnnN5VaAN29tpWMgr9sLpve5Ka8iCO8xnIxsM
5rtlSvLlFW0SInXyJsBT6NyqHrk2GZBhscgT+Qb9ouSYjil4UFRADAAEhBZPVisO
ZQiELKPS+BxyRL15QhMB7k7u1z0GRzlrG7CcopzrYM+4JLGE+2nXnoy7MSjdNduH
w4sWwI66hD192Lpkh83HZneONXiZhJdEJOHHJ8G+rYwuZRAlnLs82y+OROIozuKV
yFhWMk+BUGgkeftmAzIiUAneKwKugqz9QExVPo1imGAsiVHdprTTPn/34ZNpsDR7
MXwzitVqvu/pa3BYDha7RTpeCdVPFqDs8BPFgcAleM75QQcnPtbUD/apJHUQ5D5q
8c2U/2hTtcTMZIMCscoBBpx98bSOS9ojIJSGYKCdBj6rqnAFNYasayVCN5c5pPIw
Mj7HUww4gKXVKMvNDnjaXqFBEgEjSv5cquZ993C8gVGHLiMnq/Bj5k9SeOD0gTKD
/uLuLhKiMI6sOJQrYW5W0P3tTNcYGUeS0hBZW2Mo6PM+BimfzstZhsdFQnjzMEld
I5elwqWKysEvxXIvLnGLVWXJ6s0Pyr6J0ASmxpjskQEcPgaOxkRVwNzC18eSq3Ey
zUEWoyHiDedB4CCIq6nXY01FC5MCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgKkMA8G
A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFBj1+WwOdP8rb95R7kOmWena3RfMA0G
CSqGSIb3DQEBCwUAA4ICAQDQtOpfNPrv+V8ObOb+pie//UfTReOwXtBZgTxMu1Bi
uYIiFEveQ18HGAeIhbVm8wLjtfPkoJlZKzdCcMqSmLt0LZQNs13IQ8M+YuXeu5pX
PJOu0WrbdQHW5JMnPxwKMk5T2axbrX9dYW9gvr8sh5OlnNTx88fY1vMBsnNLVZT+
kC7Daf0zT0Go6VxBk6KRtfpoVCy/aYgwbJ1u5W61eYtXC4ezrpoLINo7zVs7Tob8
iIxJMQ/iEk/7BbIgVh9z8lNeexdjXCqm8952pPhkGONneCESTxJjgYqXyhlV0ict
OP+CiMHl5yf6+eklfXU78Jmkh/46XBqu7JV8lt8xbbSJ4AITWxi3csxC/Xztyu/g
H5nS2gAmpAbTjHq7lGicFScBuR3g0o3+64KN3XhVXN1KFrTlsGSOxyPE657p2xNw
tAAQs9IEBIPVqMInOGue6LbHTzCzW8hMClfu0CwPXiMY5DWKif7O9kzxnb9HdmAl
gnDn+9OzTw7oAW1UyVTSbzYy0Tw1ioYR7U77Z+Gcst2+mIuWp7BFNkaX5mPaacCT
GLnXoZk8UU0ph5/uBfZL3dNsJKeXlnCMAXACdLicnMC19g6P/dKqRZcI2w7kTPtF
2GlKMYjeKDuAUc9VeGzDc6PAX4oqF8XPfP5Mie4nrtpYnL0zKV1RcUS1yX1TC24O
ig==
-----END CERTIFICATE-----
`)
// Unused, but can be useful to (re)generate some certificates
// nolint:deadcode,unused,varcheck
caKey = []byte(`
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
`)
serverCert = []byte(`
-----BEGIN CERTIFICATE-----
MIIFWDCCA0CgAwIBAgIRAMWnlYEx52Vws2b3EzexW+UwDQYJKoZIhvcNAQELBQAw
IDEeMBwGA1UEAxMVUHJvbXRhaWwgVGVzdCBSb290IENBMB4XDTIyMDYyOTA4MTQy
NFoXDTQyMDYyOTA4MTQyNFowKzEpMCcGA1UEAxMgUHJvbXRhaWwgVGVzdCBTZXJ2
ZXIgQ2VydGlmaWNhdGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCo
8+m8sVjG2tvRqzFWD6XRwvWIV/7nOHhuL7ygdouTJ5MKjpKHSudOXOoxHw9aNA4u
zmExqlSD4RVnwb2R/nXoqO1Ae5VavkNngeDw5Uk/RacqF4WFCnmFNxh523iA4ifo
ZxmVhQoE1t3O4kMrygK2SEpSTY58PfuqLfd7ZyHDEmpu9pYfuQQCqKLOsVQS5mqY
g7gyKQQLq0D4beCsSuih09PskMiG29uh/qCdSmDDR++j42xP/fwXVGm3nsOMLjQf
1DFlZFqmQS42Da1KtnKzz+SVDSHihyRKiZ0KAyyDHYdKToFO/zYlCgFGw86o4VGu
HKbolE6oPrBnqdXyIf9cON4RdnoTrChG4E6yq4LN8XoNRloePjoGQ9huoqwGie3m
c06Pnj2eV4oCJwdLarKZqZzdJnanx+ctObAGGGjjV1ocNGFc2EMBpTFVpy20Kqd/
E7t2yeGU6wJhzMNtvyFHhcOY+7PRTuvrUzbK1McFU/6NKBn4ioW2XBU8CjPEKGNx
itIZWnxppqkt2EemZEB+L1QpNtNlFmSYLqPm+j1134os3I3s+kkawiSjBcpqgzDf
stt64LiO/ULXDfPexbzE+mggQ3GsQ+b5v2O4KTQ4A4ilI48+0Qn3YxqfaVJmusGE
+Jkpo/Fnt3OCJaYBqsSzK5dIzF9TJhsOb+f5NGBJEQIDAQABo4GBMH8wDgYDVR0P
AQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMB
Af8EAjAAMB8GA1UdIwQYMBaAFFBj1+WwOdP8rb95R7kOmWena3RfMB8GA1UdEQQY
MBaCFHByb210YWlsLmV4YW1wbGUuY29tMA0GCSqGSIb3DQEBCwUAA4ICAQApSDHl
IECz4Ix+6zZqNU0DgulYTXcHKtnXEKRJVTULbKy/mWzE5ZAgVV0rpRLHbRg0fWYh
4tjd5X/Pedf4OtnpV6ekkvBf+QCKAmDiWN9rKhjdVoTFw0+wavQv1yzz8++2HenR
rgq7wWuwg0hB9/KKOWW09ZuBynjB7aeoWHztIbD+/cugMlzqDX8hODRl3OaEAwM3
PBpYEqFSuPBNrCK5Y0tGgzZDdsxrDYcX5CjJdrgwtZ1kFOT8J2VE+2Sqc7KMCPFl
LQmmtIcwjljNABf5d2L978tISFtwRoZVxrsTODqLLF8l6B7JUQdCpmoM+549E0cS
bpTj4FVftJwEpElMFMVw/Uh5pA7hOLGAK3YYqBx6fbEGHn+WmwLA5Io7tbBSKUX/
hNlOFupAU3Q/OawqlmSPRflqKIg4b8TgSVlafJOFmvKg0WLGVuLtl65g9eNQVht9
KLlPPCPbpYKXpXya42eFazxEepOeaCkchOUB+x4tmAZ44NJTMR+UmiGLGCjdQTpU
m892bbGtLA0hGhYGrMsI546Xd8PjNI117CARrDpk57E1V+CsAO6ZTOPLgI4q976L
kWYB12V1t/BNtGyChdmfIYBqvTYAGk9hbqG80SjmcZtPu5JIEvIXCyaYXiWmEs2l
j1ieRNjgNYyG/7wJmilCsnpjbWza85/JzxE1cA==
-----END CERTIFICATE-----
`)
serverKey = []byte(`
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
`)
clientCert = []byte(`
-----BEGIN CERTIFICATE-----
MIIFNTCCAx2gAwIBAgIQWzE3b7oUqYGe2UvYWJBnyDANBgkqhkiG9w0BAQsFADAg
MR4wHAYDVQQDExVQcm9tdGFpbCBUZXN0IFJvb3QgQ0EwHhcNMjIwNjI5MDgxNDI0
WhcNNDIwNjI5MDgxNDI0WjArMSkwJwYDVQQDEyBQcm9tdGFpbCBUZXN0IENsaWVu
dCBDZXJ0aWZpY2F0ZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALcQ
KhIIL7EZLIDWPMIkT5cJdPRavs5/LO50isCVs2z+PTA4mIkj2NEk8qFqgc3+1LUh
SV/NQ3p0LikSx9M6g1oBJbqQ7W6BcCzzUOHb4QlGoa2DXXGONPdO3AJxTTDNU6Li
xT5ESTbuDe56JDw3x2V0pxOzCUSuTMa1mvHnIojVn/8qHOZB0l4o9c44oHGJDUGh
o1wAc3UXGMLsd6IEYsHzLyG6kG7ayqToFftI/rkpEK8tCWMbclewh22c0OCXejEZ
pS9mz2decoIG7NnkqrRwUj+RPNlKJgBJ2USYimbQZHmdZWNb+vP/HFXs1Eq0sin+
5HrRnzuB6yCwQlqvR7Db3buENEXG2OcglGmO/1mBfB4nW7JKFAvIqBBtHDRmBCYr
YS9htPiZte8Mfak3RncxLLccEzo1CNqtW9BLfryGH3l+6LR0yZkw+C95RZ9Wni4T
e5hy5yX8SW3z4AUb3ZYbFROW4sW/sSsh8VucZoa4OXw981OB4ZGrtJnncvc1KE5Q
BBF+bRZKdMQhzwb7pZq31kZjH0So53Ntyf4S6VHgUOTs8xorPSjnP85BKnnm7XsG
W/zP+kGCyjOCu4WIrNvSlIguF4KcVZulWbMljVCU0TwKNbxBm5SZrTXPoJeyRtE6
ai+fHPoMjJvwUaLYQUkzTpfdGg8OCV3NX/LvbCuVAgMBAAGjYDBeMA4GA1UdDwEB
/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/
BAIwADAfBgNVHSMEGDAWgBRQY9flsDnT/K2/eUe5Dplnp2t0XzANBgkqhkiG9w0B
AQsFAAOCAgEAxJvDifKqK6EQrN5VPL68IPORu1VK17HeSJ2xLScL3Hh7vulPs9Nf
HLixcOhixsYhgurFZ3M3K05tT0EKy1K7WLJzJEhPccAkbz+d2oIeghksq2l75u20
t2o1X8rgT+/7d/j+VBur/+igQdwvylo+wgGNosX8VmjyQrZBWIHvDTyzrvODFbZa
JYf3DfgLSF5tr4e/HNLhynUD9G40CmRLQh7PkojrMXMyeqqWpBPzDBlZgvH2QMK8
K9S8KUuaZhGUTLQmkR3NP/bx1V/Ks1/BtpmdIchQ42w+Uu2PM/pmuZsnX7bK0tzd
zCFjgSIxifN8BKdcKMEngo+MwYy/Fj3vzy4qXxtOCbnzB+A/ziLiJV3Tsdwm+nPO
xZFcXXfnCMoNF0ouv2/WAbUrKLTZXL712MZ14JT79TkKxWZ49AUHSiGfm1I45iky
xgcn4FVgJpsCheRqL+gecNDyq+4VdwlWuFAuqMI4UBUbWwyAntOL1iiyENGA1ygo
OVuQq9M0bh93d5U+Ct79CsL4LLaoRrvBGJ6WnO8PKTTLqfFC3T8ySCtVGZiLoSqn
fJ1uhxhK8YSYhod+81/nkpJuF1xRg1t2kXgvUxPR9jzf96QaZ/94oryEH3zr59Rb
wmOulo1MN6yRdGzWiJ8sZ8VXUuh0xBCUiwrpo++Dda2s0bF0YzJGI6E=
-----END CERTIFICATE-----
`)
clientKey = []byte(`
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
`)
)
type formatFunc func(string) string
@ -503,243 +563,239 @@ func TestSyslogTarget_TLSConfigWithoutServerKey(t *testing.T) {
require.Error(t, err, "error setting up syslog target: certificate and key files are required")
}
// TODO re-enable after someone creates new certificates, the certs in this file are expired
// x509: certificate has expired or is not yet valid: current time 2022-06-27T17:25:51-04:00 is after 2022-06-27T16:56:55Z
//func TestSyslogTarget_TLSConfig(t *testing.T) {
// t.Run("NewlineSeparatedMessages", func(t *testing.T) {
// testSyslogTargetWithTLS(t, fmtNewline)
// })
// t.Run("OctetCounting", func(t *testing.T) {
// testSyslogTargetWithTLS(t, fmtOctetCounting)
// })
//}
//func testSyslogTargetWithTLS(t *testing.T, fmtFunc formatFunc) {
// caCertPool := x509.NewCertPool()
// caCertPool.AppendCertsFromPEM(caCert)
//
// serverCertFile, err := createTempFile(serverCert)
// if err != nil {
// t.Fatalf("Unable to create server certificate temporary file: %s", err)
// }
// defer os.Remove(serverCertFile.Name())
//
// serverKeyFile, err := createTempFile(serverKey)
// if err != nil {
// t.Fatalf("Unable to create server key temporary file: %s", err)
// }
// defer os.Remove(serverKeyFile.Name())
//
// w := log.NewSyncWriter(os.Stderr)
// logger := log.NewLogfmtLogger(w)
// client := fake.New(func() {})
//
// metrics := NewMetrics(nil)
// tgt, err := NewSyslogTarget(metrics, logger, client, relabelConfig(t), &scrapeconfig.SyslogTargetConfig{
// ListenAddress: "127.0.0.1:0",
// LabelStructuredData: true,
// Labels: model.LabelSet{
// "test": "syslog_target",
// },
// TLSConfig: promconfig.TLSConfig{
// CertFile: serverCertFile.Name(),
// KeyFile: serverKeyFile.Name(),
// },
// })
// require.NoError(t, err)
// defer func() {
// require.NoError(t, tgt.Stop())
// }()
//
// tlsConfig := tls.Config{
// RootCAs: caCertPool,
// ServerName: "promtail.example.com",
// }
//
// addr := tgt.ListenAddress().String()
// c, err := tls.Dial("tcp", addr, &tlsConfig)
// require.NoError(t, err)
//
// validMessages := []string{
// `<165>1 2018-10-11T22:14:15.003Z host5 e - id1 [custom@32473 exkey="1"] An application event log entry...`,
// `<165>1 2018-10-11T22:14:15.005Z host5 e - id2 [custom@32473 exkey="2"] An application event log entry...`,
// `<165>1 2018-10-11T22:14:15.007Z host5 e - id3 [custom@32473 exkey="3"] An application event log entry...`,
// }
// // Messages that are malformed but still valid.
// // This causes error messages being written, but the parser does not stop and close the connection.
// malformeddMessages := []string{
// `<165>1 - An application event log entry...`,
// `<165>1 2018-10-11T22:14:15.007Z host5 e - An application event log entry...`,
// }
// messages := append(malformeddMessages, validMessages...)
//
// err = writeMessagesToStream(c, messages, fmtFunc)
// require.NoError(t, err)
// require.NoError(t, c.Close())
//
// require.Eventuallyf(t, func() bool {
// return len(client.Received()) == len(validMessages)
// }, time.Second, time.Millisecond, "Expected to receive %d messages, got %d.", len(validMessages), len(client.Received()))
//
// require.Equal(t, model.LabelSet{
// "test": "syslog_target",
//
// "severity": "notice",
// "facility": "local4",
// "hostname": "host5",
// "app_name": "e",
// "msg_id": "id1",
//
// "sd_custom_exkey": "1",
// }, client.Received()[0].Labels)
// require.Equal(t, "An application event log entry...", client.Received()[0].Line)
//
// require.NotZero(t, client.Received()[0].Timestamp)
//}
//
//func createTempFile(data []byte) (*os.File, error) {
// tmpFile, err := ioutil.TempFile("", "")
// if err != nil {
// return nil, fmt.Errorf("failed to create temporary file: %s", err)
// }
//
// if _, err := tmpFile.Write(data); err != nil {
// return nil, fmt.Errorf("failed to write data to temporary file: %s", err)
// }
//
// if err := tmpFile.Close(); err != nil {
// return nil, err
// }
//
// return tmpFile, nil
//}
// TODO re-enable after someone creates new certificates, the certs in this file are expired
// x509: certificate has expired or is not yet valid: current time 2022-06-27T17:25:51-04:00 is after 2022-06-27T16:56:55Z
//func TestSyslogTarget_TLSConfigVerifyClientCertificate(t *testing.T) {
// t.Run("NewlineSeparatedMessages", func(t *testing.T) {
// testSyslogTargetWithTLSVerifyClientCertificate(t, fmtNewline)
// })
// t.Run("OctetCounting", func(t *testing.T) {
// testSyslogTargetWithTLSVerifyClientCertificate(t, fmtOctetCounting)
// })
//}
//func testSyslogTargetWithTLSVerifyClientCertificate(t *testing.T, fmtFunc formatFunc) {
// caCertFile, err := createTempFile(caCert)
// if err != nil {
// t.Fatalf("Unable to create CA certificate temporary file: %s", err)
// }
// defer os.Remove(caCertFile.Name())
//
// caCertPool := x509.NewCertPool()
// caCertPool.AppendCertsFromPEM(caCert)
//
// serverCertFile, err := createTempFile(serverCert)
// if err != nil {
// t.Fatalf("Unable to create server certificate temporary file: %s", err)
// }
// defer os.Remove(serverCertFile.Name())
//
// serverKeyFile, err := createTempFile(serverKey)
// if err != nil {
// t.Fatalf("Unable to create server key temporary file: %s", err)
// }
// defer os.Remove(serverKeyFile.Name())
//
// clientCertFile, err := createTempFile(clientCert)
// if err != nil {
// t.Fatalf("Unable to create client certificate temporary file: %s", err)
// }
// defer os.Remove(clientCertFile.Name())
//
// clientKeyFile, err := createTempFile(clientKey)
// if err != nil {
// t.Fatalf("Unable to create client key temporary file: %s", err)
// }
// defer os.Remove(clientKeyFile.Name())
//
// clientCerts, err := tls.LoadX509KeyPair(clientCertFile.Name(), clientKeyFile.Name())
// if err != nil {
// t.Fatalf("Unable to load client certificate or key: %s", err)
// }
//
// w := log.NewSyncWriter(os.Stderr)
// logger := log.NewLogfmtLogger(w)
// client := fake.New(func() {})
//
// metrics := NewMetrics(nil)
// tgt, err := NewSyslogTarget(metrics, logger, client, relabelConfig(t), &scrapeconfig.SyslogTargetConfig{
// ListenAddress: "127.0.0.1:0",
// LabelStructuredData: true,
// Labels: model.LabelSet{
// "test": "syslog_target",
// },
// TLSConfig: promconfig.TLSConfig{
// CAFile: caCertFile.Name(),
// CertFile: serverCertFile.Name(),
// KeyFile: serverKeyFile.Name(),
// },
// })
// require.NoError(t, err)
// defer func() {
// require.NoError(t, tgt.Stop())
// }()
//
// tlsConfig := tls.Config{
// RootCAs: caCertPool,
// ServerName: "promtail.example.com",
// }
//
// addr := tgt.ListenAddress().String()
//
// t.Run("WithoutClientCertificate", func(t *testing.T) {
// c, err := tls.Dial("tcp", addr, &tlsConfig)
// require.NoError(t, err)
//
// err = c.SetDeadline(time.Now().Add(time.Second))
// require.NoError(t, err)
//
// buf := make([]byte, 1)
// _, err = c.Read(buf)
// require.EqualError(t, err, "remote error: tls: bad certificate")
// })
//
// t.Run("WithClientCertificate", func(t *testing.T) {
// tlsConfig.Certificates = []tls.Certificate{clientCerts}
// c, err := tls.Dial("tcp", addr, &tlsConfig)
// require.NoError(t, err)
//
// messages := []string{
// `<165>1 2018-10-11T22:14:15.003Z host5 e - id1 [custom@32473 exkey="1"] An application event log entry...`,
// `<165>1 2018-10-11T22:14:15.005Z host5 e - id2 [custom@32473 exkey="2"] An application event log entry...`,
// `<165>1 2018-10-11T22:14:15.007Z host5 e - id3 [custom@32473 exkey="3"] An application event log entry...`,
// }
//
// err = writeMessagesToStream(c, messages, fmtFunc)
// require.NoError(t, err)
// require.NoError(t, c.Close())
//
// require.Eventuallyf(t, func() bool {
// return len(client.Received()) == len(messages)
// }, time.Second, time.Millisecond, "Expected to receive %d messages, got %d.", len(messages), len(client.Received()))
//
// require.Equal(t, model.LabelSet{
// "test": "syslog_target",
//
// "severity": "notice",
// "facility": "local4",
// "hostname": "host5",
// "app_name": "e",
// "msg_id": "id1",
//
// "sd_custom_exkey": "1",
// }, client.Received()[0].Labels)
// require.Equal(t, "An application event log entry...", client.Received()[0].Line)
//
// require.NotZero(t, client.Received()[0].Timestamp)
// })
//}
func TestSyslogTarget_TLSConfig(t *testing.T) {
t.Run("NewlineSeparatedMessages", func(t *testing.T) {
testSyslogTargetWithTLS(t, fmtNewline)
})
t.Run("OctetCounting", func(t *testing.T) {
testSyslogTargetWithTLS(t, fmtOctetCounting)
})
}
func testSyslogTargetWithTLS(t *testing.T, fmtFunc formatFunc) {
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(caCert)
serverCertFile, err := createTempFile(serverCert)
if err != nil {
t.Fatalf("Unable to create server certificate temporary file: %s", err)
}
defer os.Remove(serverCertFile.Name())
serverKeyFile, err := createTempFile(serverKey)
if err != nil {
t.Fatalf("Unable to create server key temporary file: %s", err)
}
defer os.Remove(serverKeyFile.Name())
w := log.NewSyncWriter(os.Stderr)
logger := log.NewLogfmtLogger(w)
client := fake.New(func() {})
metrics := NewMetrics(nil)
tgt, err := NewSyslogTarget(metrics, logger, client, relabelConfig(t), &scrapeconfig.SyslogTargetConfig{
ListenAddress: "127.0.0.1:0",
LabelStructuredData: true,
Labels: model.LabelSet{
"test": "syslog_target",
},
TLSConfig: promconfig.TLSConfig{
CertFile: serverCertFile.Name(),
KeyFile: serverKeyFile.Name(),
},
})
require.NoError(t, err)
defer func() {
require.NoError(t, tgt.Stop())
}()
tlsConfig := tls.Config{
RootCAs: caCertPool,
ServerName: "promtail.example.com",
}
addr := tgt.ListenAddress().String()
c, err := tls.Dial("tcp", addr, &tlsConfig)
require.NoError(t, err)
validMessages := []string{
`<165>1 2018-10-11T22:14:15.003Z host5 e - id1 [custom@32473 exkey="1"] An application event log entry...`,
`<165>1 2018-10-11T22:14:15.005Z host5 e - id2 [custom@32473 exkey="2"] An application event log entry...`,
`<165>1 2018-10-11T22:14:15.007Z host5 e - id3 [custom@32473 exkey="3"] An application event log entry...`,
}
// Messages that are malformed but still valid.
// This causes error messages being written, but the parser does not stop and close the connection.
malformeddMessages := []string{
`<165>1 - An application event log entry...`,
`<165>1 2018-10-11T22:14:15.007Z host5 e - An application event log entry...`,
}
messages := append(malformeddMessages, validMessages...)
err = writeMessagesToStream(c, messages, fmtFunc)
require.NoError(t, err)
require.NoError(t, c.Close())
require.Eventuallyf(t, func() bool {
return len(client.Received()) == len(validMessages)
}, time.Second, time.Millisecond, "Expected to receive %d messages, got %d.", len(validMessages), len(client.Received()))
require.Equal(t, model.LabelSet{
"test": "syslog_target",
"severity": "notice",
"facility": "local4",
"hostname": "host5",
"app_name": "e",
"msg_id": "id1",
"sd_custom_exkey": "1",
}, client.Received()[0].Labels)
require.Equal(t, "An application event log entry...", client.Received()[0].Line)
require.NotZero(t, client.Received()[0].Timestamp)
}
func createTempFile(data []byte) (*os.File, error) {
tmpFile, err := ioutil.TempFile("", "")
if err != nil {
return nil, fmt.Errorf("failed to create temporary file: %s", err)
}
if _, err := tmpFile.Write(data); err != nil {
return nil, fmt.Errorf("failed to write data to temporary file: %s", err)
}
if err := tmpFile.Close(); err != nil {
return nil, err
}
return tmpFile, nil
}
func TestSyslogTarget_TLSConfigVerifyClientCertificate(t *testing.T) {
t.Run("NewlineSeparatedMessages", func(t *testing.T) {
testSyslogTargetWithTLSVerifyClientCertificate(t, fmtNewline)
})
t.Run("OctetCounting", func(t *testing.T) {
testSyslogTargetWithTLSVerifyClientCertificate(t, fmtOctetCounting)
})
}
func testSyslogTargetWithTLSVerifyClientCertificate(t *testing.T, fmtFunc formatFunc) {
caCertFile, err := createTempFile(caCert)
if err != nil {
t.Fatalf("Unable to create CA certificate temporary file: %s", err)
}
defer os.Remove(caCertFile.Name())
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(caCert)
serverCertFile, err := createTempFile(serverCert)
if err != nil {
t.Fatalf("Unable to create server certificate temporary file: %s", err)
}
defer os.Remove(serverCertFile.Name())
serverKeyFile, err := createTempFile(serverKey)
if err != nil {
t.Fatalf("Unable to create server key temporary file: %s", err)
}
defer os.Remove(serverKeyFile.Name())
clientCertFile, err := createTempFile(clientCert)
if err != nil {
t.Fatalf("Unable to create client certificate temporary file: %s", err)
}
defer os.Remove(clientCertFile.Name())
clientKeyFile, err := createTempFile(clientKey)
if err != nil {
t.Fatalf("Unable to create client key temporary file: %s", err)
}
defer os.Remove(clientKeyFile.Name())
clientCerts, err := tls.LoadX509KeyPair(clientCertFile.Name(), clientKeyFile.Name())
if err != nil {
t.Fatalf("Unable to load client certificate or key: %s", err)
}
w := log.NewSyncWriter(os.Stderr)
logger := log.NewLogfmtLogger(w)
client := fake.New(func() {})
metrics := NewMetrics(nil)
tgt, err := NewSyslogTarget(metrics, logger, client, relabelConfig(t), &scrapeconfig.SyslogTargetConfig{
ListenAddress: "127.0.0.1:0",
LabelStructuredData: true,
Labels: model.LabelSet{
"test": "syslog_target",
},
TLSConfig: promconfig.TLSConfig{
CAFile: caCertFile.Name(),
CertFile: serverCertFile.Name(),
KeyFile: serverKeyFile.Name(),
},
})
require.NoError(t, err)
defer func() {
require.NoError(t, tgt.Stop())
}()
tlsConfig := tls.Config{
RootCAs: caCertPool,
ServerName: "promtail.example.com",
}
addr := tgt.ListenAddress().String()
t.Run("WithoutClientCertificate", func(t *testing.T) {
c, err := tls.Dial("tcp", addr, &tlsConfig)
require.NoError(t, err)
err = c.SetDeadline(time.Now().Add(time.Second))
require.NoError(t, err)
buf := make([]byte, 1)
_, err = c.Read(buf)
require.EqualError(t, err, "remote error: tls: bad certificate")
})
t.Run("WithClientCertificate", func(t *testing.T) {
tlsConfig.Certificates = []tls.Certificate{clientCerts}
c, err := tls.Dial("tcp", addr, &tlsConfig)
require.NoError(t, err)
messages := []string{
`<165>1 2018-10-11T22:14:15.003Z host5 e - id1 [custom@32473 exkey="1"] An application event log entry...`,
`<165>1 2018-10-11T22:14:15.005Z host5 e - id2 [custom@32473 exkey="2"] An application event log entry...`,
`<165>1 2018-10-11T22:14:15.007Z host5 e - id3 [custom@32473 exkey="3"] An application event log entry...`,
}
err = writeMessagesToStream(c, messages, fmtFunc)
require.NoError(t, err)
require.NoError(t, c.Close())
require.Eventuallyf(t, func() bool {
return len(client.Received()) == len(messages)
}, time.Second, time.Millisecond, "Expected to receive %d messages, got %d.", len(messages), len(client.Received()))
require.Equal(t, model.LabelSet{
"test": "syslog_target",
"severity": "notice",
"facility": "local4",
"hostname": "host5",
"app_name": "e",
"msg_id": "id1",
"sd_custom_exkey": "1",
}, client.Received()[0].Labels)
require.Equal(t, "An application event log entry...", client.Received()[0].Line)
require.NotZero(t, client.Received()[0].Timestamp)
})
}
func TestSyslogTarget_InvalidData(t *testing.T) {
w := log.NewSyncWriter(os.Stderr)

Loading…
Cancel
Save