github.com/aavshr/aws-sdk-go@v1.41.3/service/cloudfront/sign/sign_url_test.go (about) 1 package sign 2 3 import ( 4 "strings" 5 "testing" 6 "time" 7 8 "github.com/aavshr/aws-sdk-go/awstesting/mock" 9 ) 10 11 var testSignTime = time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC) 12 13 var testSignURL = []struct { 14 u string 15 p *Policy 16 t time.Time 17 customPolicy bool 18 expectErr bool 19 out string 20 }{ 21 { 22 "http://example.com/a", NewCannedPolicy("http://example.com/a", testSignTime), time.Time{}, true, false, 23 "http://example.com/a?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2V4YW1wbGUuY29tL2EiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEyNTc4OTQwMDB9fX1dfQ__&Signature=cMutWOvPMOPuh0KFDsOdbML~1fe0eEBC1hdMLGRbYr3mTRrVbKDdUXL6l3vlbE0Og3rTRS6mlaSORTwesN1srESH1pXFUyCVba8tWqNy1frEiL7jZLyzA1KndH0olfJDfgHXdw-Edtk0m8mqY~AnGIYGYDu659dWeP49jVeYn30XF9sYkRCdS5IezAkqh8TO9tTDNGS4Ic6DQue4agHUFLNv1VErTafUxlSBp8hlPCuMdtZLEBLr9UJVc3oWJI3zc1~9JgVTDjbXYV1-HgTn8qQsbAU2KcieUonIzTme2td-7c2FCC0EAbOF~6QXTHWcAiSB5nVmbxn-Mx-QMVsiLw__&Key-Pair-Id=KeyID", 24 }, 25 { 26 "https://example.com/a?b=1&c=2", NewCannedPolicy("https://example.com/a?b=1&c=2", testSignTime), time.Time{}, true, false, 27 "https://example.com/a?b=1&c=2&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9hP2I9MSZjPTIiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEyNTc4OTQwMDB9fX1dfQ__&Signature=E6xB7RtIDvx8AxM1Wuup3ROYTQwBDW-qqcrb8lSUvtL78wenjh3P0YLXK-mFK0PSzdNtzI2ZIXja6Nh2yma0IVQiZMjn3wijvVsMy9fRXyusVXB1zYSfiInVr2uhqSb-ZCn1RD32ebyMD6IWn5Kss1fT4wefc8Q76J0Y4jprAvmLCtGnrW~quZdOg~KKmY-qK11ifNwv2ECADBxZeEx1PIDHdWuXYrCBJIwSl-bVscwQWDm2BzeYuHCaLuAVDuc62JJzc7nX3E1CA1VRHY~vegYjOV6zVxtp7aBV4RJUY4yfHNM4n640FXUPPwMacqE-lnNOfx704YVTl4tjzuvzuA__&Key-Pair-Id=KeyID", 28 }, 29 { 30 "http://example.com/a", nil, testSignTime, false, false, 31 "http://example.com/a?Expires=1257894000&Signature=cMutWOvPMOPuh0KFDsOdbML~1fe0eEBC1hdMLGRbYr3mTRrVbKDdUXL6l3vlbE0Og3rTRS6mlaSORTwesN1srESH1pXFUyCVba8tWqNy1frEiL7jZLyzA1KndH0olfJDfgHXdw-Edtk0m8mqY~AnGIYGYDu659dWeP49jVeYn30XF9sYkRCdS5IezAkqh8TO9tTDNGS4Ic6DQue4agHUFLNv1VErTafUxlSBp8hlPCuMdtZLEBLr9UJVc3oWJI3zc1~9JgVTDjbXYV1-HgTn8qQsbAU2KcieUonIzTme2td-7c2FCC0EAbOF~6QXTHWcAiSB5nVmbxn-Mx-QMVsiLw__&Key-Pair-Id=KeyID", 32 }, 33 { 34 "http://example.com/Ƿ", nil, testSignTime, false, true, 35 "http://example.com/Ƿ?Expires=1257894000&Signature=Y6qvWOZNl99uNPMGprvrKXEmXpLWJ-xXKVHL~nmF0BR1jPb2XA2jor0MUYKBE4ViTkWZZ1dz46zSFMsEEfw~n6-SVYXZ2QHBBTkSAoxGtH6dH33Ph9pz~f9Wy7aYXq~9I-Ah0E6yC~BMiQuXe5qAOucuMPorKgPfC0dvLMw2EF0_&Key-Pair-Id=KeyID", 36 }, 37 { 38 "http://example.com/a", &Policy{}, time.Time{}, true, true, 39 "http://example.com/a?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2V4YW1wbGUuY29tL2EiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEyNTc4OTQwMDB9fX1dfQ__&Signature=Y6qvWOZNl99uNPMGprvrKXEmXpLWJ-xXKVHL~nmF0BR1jPb2XA2jor0MUYKBE4ViTkWZZ1dz46zSFMsEEfw~n6-SVYXZ2QHBBTkSAoxGtH6dH33Ph9pz~f9Wy7aYXq~9I-Ah0E6yC~BMiQuXe5qAOucuMPorKgPfC0dvLMw2EF0_&Key-Pair-Id=KeyID", 40 }, 41 { 42 "http://example.com/a", NewCannedPolicy("", testSignTime), time.Time{}, true, true, 43 "http://example.com/a?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2V4YW1wbGUuY29tL2EiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEyNTc4OTQwMDB9fX1dfQ__&Signature=Y6qvWOZNl99uNPMGprvrKXEmXpLWJ-xXKVHL~nmF0BR1jPb2XA2jor0MUYKBE4ViTkWZZ1dz46zSFMsEEfw~n6-SVYXZ2QHBBTkSAoxGtH6dH33Ph9pz~f9Wy7aYXq~9I-Ah0E6yC~BMiQuXe5qAOucuMPorKgPfC0dvLMw2EF0_&Key-Pair-Id=KeyID", 44 }, 45 { 46 "rtmp://example.com/a", nil, testSignTime, false, false, 47 "a?Expires=1257894000&Signature=GIOIWRaT1u5~JyNhyvsbvLfu1eYjmObAHPpV3p7wNL3X-Vts9uj2JPW3bX-xZp4HD~deps5f-GpPkIE7RPq7VCOZMLdckC4V9bvSphmMYP~OVoHwPiRMHgVW8pt9lsODGMAKVcMK-h2WROOxgzwDhfcGJQ~afs~Cz04Cus9tKScLFTNYHbLxpN0VI-vJwOvDW0tavGKxOmLeMDLTgLZSh90MjgESMME8zssks8rXngWxDgV-bLySe1VYHOcC07BMb5RkPaO036gjHJnw5hXhUCug0rkKcSxwU1IsJnGpgTkf7dVo453L2sLeRzK8R-6z9O2Onv6ow-ZoHx7fVw8rww__&Key-Pair-Id=KeyID", 48 }, 49 { 50 "rtmp://example.com/a", NewCannedPolicy("a", testSignTime), time.Time{}, true, false, 51 "a?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiYSIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTI1Nzg5NDAwMH19fV19&Signature=GIOIWRaT1u5~JyNhyvsbvLfu1eYjmObAHPpV3p7wNL3X-Vts9uj2JPW3bX-xZp4HD~deps5f-GpPkIE7RPq7VCOZMLdckC4V9bvSphmMYP~OVoHwPiRMHgVW8pt9lsODGMAKVcMK-h2WROOxgzwDhfcGJQ~afs~Cz04Cus9tKScLFTNYHbLxpN0VI-vJwOvDW0tavGKxOmLeMDLTgLZSh90MjgESMME8zssks8rXngWxDgV-bLySe1VYHOcC07BMb5RkPaO036gjHJnw5hXhUCug0rkKcSxwU1IsJnGpgTkf7dVo453L2sLeRzK8R-6z9O2Onv6ow-ZoHx7fVw8rww__&Key-Pair-Id=KeyID", 52 }, 53 } 54 55 // TODO Sign URL HTTP 56 // TODO Sign URL RMTP 57 func TestSignURL(t *testing.T) { 58 privKey := mock.RSAPrivateKey 59 60 s := NewURLSigner("KeyID", privKey) 61 62 for i, v := range testSignURL { 63 var u string 64 var err error 65 66 if v.customPolicy { 67 u, err = s.SignWithPolicy(v.u, v.p) 68 } else { 69 u, err = s.Sign(v.u, v.t) 70 } 71 72 if err != nil { 73 if v.expectErr { 74 continue 75 } 76 t.Errorf("%d, Unexpected error, %s", i, err.Error()) 77 continue 78 } else if v.expectErr { 79 t.Errorf("%d Expected error, but got none", i) 80 continue 81 } 82 83 if u != v.out { 84 t.Errorf("%d, Unexpected URL\nexpect: %s\nactual: %s\n", i, v.out, u) 85 } 86 } 87 88 } 89 90 var testBuildSignedURL = []struct { 91 u, keyID string 92 p *Policy 93 customPolicy bool 94 b64Policy, b64Sig []byte 95 out string 96 }{ 97 { 98 "https://example.com/a?b=1", "KeyID", NewCannedPolicy("", testSignTime), true, []byte("b64Policy"), []byte("b64Sig"), 99 "https://example.com/a?b=1&Policy=b64Policy&Signature=b64Sig&Key-Pair-Id=KeyID", 100 }, 101 { 102 "https://example.com/a?b=1&c=2", "KeyID", NewCannedPolicy("", testSignTime), true, []byte("b64Policy"), []byte("b64Sig"), 103 "https://example.com/a?b=1&c=2&Policy=b64Policy&Signature=b64Sig&Key-Pair-Id=KeyID", 104 }, 105 { 106 "https://example.com/a", "KeyID", NewCannedPolicy("", testSignTime), true, []byte("b64Policy"), []byte("b64Sig"), 107 "https://example.com/a?Policy=b64Policy&Signature=b64Sig&Key-Pair-Id=KeyID", 108 }, 109 { 110 "https://example.com/a?b=1", "KeyID", NewCannedPolicy("https://example.com/a?b=1", testSignTime), false, []byte("b64Policy"), []byte("b64Sig"), 111 "https://example.com/a?b=1&Expires=1257894000&Signature=b64Sig&Key-Pair-Id=KeyID", 112 }, 113 } 114 115 func TestBuildSignedURL(t *testing.T) { 116 for i, v := range testBuildSignedURL { 117 u := buildSignedURL(v.u, v.keyID, v.p, v.customPolicy, v.b64Policy, v.b64Sig) 118 if u != v.out { 119 t.Errorf("%d, Unexpected URL\nexpect: %s\nactual: %s\n", i, v.out, u) 120 } 121 } 122 } 123 124 var testValidURL = []struct { 125 in, errPrefix string 126 }{ 127 {"https://example.com/a?b=1&else=b", ""}, 128 {"https://example.com/a?b=1&Policy=something&else=b", "Policy"}, 129 {"https://example.com/a?b=1&Signature=something&else=b", "Signature"}, 130 {"https://example.com/a?b=1&Key-Pair-Id=something&else=b", "Key-Pair-Id"}, 131 {"http?://example.com/a?b=1", "URL missing valid scheme"}, 132 } 133 134 func TestValidateURL(t *testing.T) { 135 for i, v := range testValidURL { 136 err := validateURL(v.in) 137 if err != nil { 138 if v.errPrefix == "" { 139 t.Errorf("%d, Unexpected error %s", i, err.Error()) 140 } 141 if !strings.HasPrefix(err.Error(), v.errPrefix) { 142 t.Errorf("%d, Expected to find prefix\nexpect: %s\nactual: %s", i, v.errPrefix, err.Error()) 143 } 144 } else if v.errPrefix != "" { 145 t.Errorf("%d, Expected error %s", i, v.errPrefix) 146 } 147 } 148 }