774 lines · 30.4 KB · Swift
RawDownload
import Foundationimport Testing@testable import CodexBarCore struct AlibabaTokenPlanSettingsReaderTests {    @Test    func `cookie reads from environment`() {        let cookie = AlibabaTokenPlanSettingsReader.cookieHeader(environment: [            AlibabaTokenPlanSettingsReader.cookieHeaderKey: "\"login_aliyunid_ticket=ticket\"",        ])        #expect(cookie == "login_aliyunid_ticket=ticket")    }     @Test    func `quota URL infers HTTPS scheme`() {        let url = AlibabaTokenPlanSettingsReader.quotaURL(environment: [            AlibabaTokenPlanSettingsReader.quotaURLKey: "quota.token-plan.test/data/api.json",        ])         #expect(url?.scheme == "https")        #expect(url?.host == "quota.token-plan.test")    }     @Test    func `quota URL rejects non HTTPS schemes`() {        let httpURL = AlibabaTokenPlanSettingsReader.quotaURL(environment: [            AlibabaTokenPlanSettingsReader.quotaURLKey: "http://quota.token-plan.test/data/api.json",        ])        let ftpURL = AlibabaTokenPlanSettingsReader.quotaURL(environment: [            AlibabaTokenPlanSettingsReader.quotaURLKey: "ftp://quota.token-plan.test/data/api.json",        ])         #expect(httpURL == nil)        #expect(ftpURL == nil)    }     @Test    func `host override rejects non HTTPS schemes`() {        let httpHost = AlibabaTokenPlanSettingsReader.hostOverride(environment: [            AlibabaTokenPlanSettingsReader.hostKey: "http://dashboard.token-plan.test",        ])        let httpsHost = AlibabaTokenPlanSettingsReader.hostOverride(environment: [            AlibabaTokenPlanSettingsReader.hostKey: "https://dashboard.token-plan.test",        ])        let bareHost = AlibabaTokenPlanSettingsReader.hostOverride(environment: [            AlibabaTokenPlanSettingsReader.hostKey: "dashboard.token-plan.test",        ])         #expect(httpHost == nil)        #expect(httpsHost == "https://dashboard.token-plan.test")        #expect(bareHost == "dashboard.token-plan.test")    }     @Test    func `default quota URL targets subscription summary API`() {        let url = AlibabaTokenPlanUsageFetcher.defaultQuotaURL        #expect(url.host == "bailian.console.aliyun.com")        #expect(url.absoluteString.contains("GetSubscriptionSummary"))        #expect(url.absoluteString.contains("BssOpenAPI-V3"))    }} struct AlibabaTokenPlanCookieHeaderTests {    @Test    func `builds URL scoped headers for API and dashboard`() throws {        let cookies = [            self.cookie(name: "login_aliyunid_ticket", value: "ticket", domain: ".aliyun.com"),            self.cookie(name: "login_current_pk", value: "account", domain: ".aliyun.com"),            self.cookie(name: "sec_token", value: "shared", domain: ".console.aliyun.com"),            self.cookie(name: "sec_token", value: "dashboard", domain: "bailian.console.aliyun.com"),            self.cookie(name: "modelstudio_only", value: "modelstudio", domain: "modelstudio.console.alibabacloud.com"),        ]         let headers = try #require(AlibabaTokenPlanCookieHeader.headers(from: cookies))         #expect(headers.apiCookieHeader.contains("login_aliyunid_ticket=ticket"))        #expect(headers.apiCookieHeader.contains("login_current_pk=account"))        #expect(headers.apiCookieHeader.contains("sec_token=dashboard"))        #expect(!headers.apiCookieHeader.contains("modelstudio_only=modelstudio"))        #expect(headers.dashboardCookieHeader.contains("sec_token=dashboard"))        #expect(!headers.dashboardCookieHeader.contains("modelstudio_only=modelstudio"))    }     @Test    func `cached token plan headers preserve URL scoping`() throws {        let headers = AlibabaTokenPlanCookieHeaders(            apiCookieHeader: "login_aliyunid_ticket=ticket; api_only=api",            dashboardCookieHeader: "login_aliyunid_ticket=ticket; dashboard_only=dashboard")         let cached = try #require(AlibabaTokenPlanCookieHeaders(cachedHeader: headers.cacheCookieHeader))         #expect(cached.apiCookieHeader.contains("api_only=api"))        #expect(!cached.apiCookieHeader.contains("dashboard_only=dashboard"))        #expect(cached.dashboardCookieHeader.contains("dashboard_only=dashboard"))        #expect(!cached.dashboardCookieHeader.contains("api_only=api"))    }     @Test    func `builds headers from environment scoped URLs`() throws {        let cookies = [            self.cookie(name: "login_aliyunid_ticket", value: "ticket", domain: ".token-plan.test"),            self.cookie(name: "api_only", value: "api", domain: "quota.token-plan.test"),            self.cookie(name: "dashboard_only", value: "dashboard", domain: "dashboard.token-plan.test"),            self.cookie(name: "prod_api_only", value: "prod-api", domain: "bailian.console.aliyun.com"),            self.cookie(name: "prod_dashboard_only", value: "prod-dashboard", domain: "bailian.console.aliyun.com"),        ]         let headers = try #require(AlibabaTokenPlanCookieHeader.headers(            from: cookies,            environment: [                AlibabaTokenPlanSettingsReader.quotaURLKey: "https://quota.token-plan.test/data/api.json",                AlibabaTokenPlanSettingsReader.hostKey: "https://dashboard.token-plan.test",            ]))         #expect(headers.apiCookieHeader.contains("login_aliyunid_ticket=ticket"))        #expect(headers.apiCookieHeader.contains("api_only=api"))        #expect(!headers.apiCookieHeader.contains("prod_api_only=prod-api"))        #expect(headers.dashboardCookieHeader.contains("dashboard_only=dashboard"))        #expect(!headers.dashboardCookieHeader.contains("prod_dashboard_only=prod-dashboard"))    }     private func cookie(        name: String,        value: String,        domain: String,        path: String = "/",        expires: Date = Date(timeIntervalSinceNow: 3600)) -> HTTPCookie    {        HTTPCookie(properties: [            .domain: domain,            .path: path,            .name: name,            .value: value,            .expires: expires,            .secure: true,        ])!    }} struct AlibabaTokenPlanUsageSnapshotTests {    @Test    func `maps used and total quota to primary window`() {        let now = Date(timeIntervalSince1970: 1_700_000_000)        let reset = Date(timeIntervalSince1970: 1_700_100_000)        let snapshot = AlibabaTokenPlanUsageSnapshot(            planName: "TOKEN PLAN",            usedQuota: 250,            totalQuota: 1000,            remainingQuota: nil,            resetsAt: reset,            updatedAt: now)         let usage = snapshot.toUsageSnapshot()         #expect(usage.primary?.usedPercent == 25)        #expect(usage.primary?.resetsAt == reset)        #expect(usage.primary?.resetDescription == "250 / 1,000 credits used")        #expect(usage.loginMethod(for: .alibabatokenplan) == "TOKEN PLAN")    }     @Test    func `does not create primary window from balance only`() {        let snapshot = AlibabaTokenPlanUsageSnapshot(            planName: "TOKEN PLAN",            usedQuota: nil,            totalQuota: nil,            remainingQuota: 700,            resetsAt: nil,            updatedAt: Date(timeIntervalSince1970: 1_700_000_000))         let usage = snapshot.toUsageSnapshot()         #expect(usage.primary == nil)        #expect(usage.loginMethod(for: .alibabatokenplan) == "TOKEN PLAN")    }} @Suite(.serialized)struct AlibabaTokenPlanUsageParsingTests {    @Test    func `parses subscription summary payload`() throws {        let now = Date(timeIntervalSince1970: 1_700_000_000)        let json = """        {          "Success": true,          "Data": {            "TotalCount": 1,            "TotalValue": 1000,            "TotalSurplusValue": 875,            "NearestExpireDate": 1701000000000          },          "Code": "200"        }        """         let snapshot = try AlibabaTokenPlanUsageFetcher.parseUsageSnapshot(from: Data(json.utf8), now: now)         #expect(snapshot.planName == "TOKEN PLAN")        #expect(snapshot.usedQuota == 125)        #expect(snapshot.totalQuota == 1000)        #expect(snapshot.remainingQuota == 875)        #expect(snapshot.resetsAt == Date(timeIntervalSince1970: 1_701_000_000))        #expect(snapshot.toUsageSnapshot().primary?.usedPercent == 12.5)    }     @Test    func `parses nested subscription summary body`() throws {        let body = """        {          "success": true,          "data": {            "totalCount": 1,            "totalSurplusValue": 750,            "totalValue": 1000          }        }        """        let payload = ["successResponse": ["body": body]]        let data = try JSONSerialization.data(withJSONObject: payload)         let snapshot = try AlibabaTokenPlanUsageFetcher.parseUsageSnapshot(from: data)         #expect(snapshot.planName == "TOKEN PLAN")        #expect(snapshot.usedQuota == 250)        #expect(snapshot.remainingQuota == 750)        #expect(snapshot.totalQuota == 1000)        #expect(snapshot.toUsageSnapshot().primary?.usedPercent == 25)    }     @Test    func `empty subscription summary stays visible without quota window`() throws {        let json = """        {          "Success": true,          "Data": {            "TotalCount": 0          }        }        """         let snapshot = try AlibabaTokenPlanUsageFetcher.parseUsageSnapshot(from: Data(json.utf8))         #expect(snapshot.planName == nil)        #expect(snapshot.totalQuota == nil)        #expect(snapshot.toUsageSnapshot().primary == nil)    }     @Test    func `login payload maps to login required`() {        let json = """        {          "code": "ConsoleNeedLogin",          "message": "You need to log in.",          "successResponse": false        }        """         #expect(throws: AlibabaTokenPlanUsageError.loginRequired) {            try AlibabaTokenPlanUsageFetcher.parseUsageSnapshot(from: Data(json.utf8))        }    }     @Test    func `post only token payload maps to login required`() {        let json = """        {          "code": "PostonlyOrTokenError",          "message": "Your request has expired. Please refresh the page.",          "successResponse": false        }        """         #expect(throws: AlibabaTokenPlanUsageError.loginRequired) {            try AlibabaTokenPlanUsageFetcher.parseUsageSnapshot(from: Data(json.utf8))        }    }     @Test    func `nested unsuccessful subscription summary maps to API error`() throws {        let body = """        {          "success": false,          "message": "Subscription lookup failed"        }        """        let payload = ["successResponse": ["body": body]]        let data = try JSONSerialization.data(withJSONObject: payload)         #expect(throws: AlibabaTokenPlanUsageError.apiError("Subscription lookup failed")) {            try AlibabaTokenPlanUsageFetcher.parseUsageSnapshot(from: data)        }    }     @Test    func `forbidden payload maps to invalid credentials`() {        let json = """        {          "statusCode": 403,          "message": "Forbidden"        }        """         #expect(throws: AlibabaTokenPlanUsageError.invalidCredentials) {            try AlibabaTokenPlanUsageFetcher.parseUsageSnapshot(from: Data(json.utf8))        }    }     @Test    func `failed forbidden payload maps to invalid credentials`() {        let json = """        {          "successResponse": false,          "statusCode": 403,          "message": "Forbidden"        }        """         #expect(throws: AlibabaTokenPlanUsageError.invalidCredentials) {            try AlibabaTokenPlanUsageFetcher.parseUsageSnapshot(from: Data(json.utf8))        }    }     @Test    func `html login payload maps to login required`() {        let html = """        <html>          <body>Please login to Alibaba Cloud</body>        </html>        """         #expect(throws: AlibabaTokenPlanUsageError.loginRequired) {            try AlibabaTokenPlanUsageFetcher.parseUsageSnapshot(from: Data(html.utf8))        }    }     @Test    func `non json payload maps to parse failed`() {        #expect(throws: AlibabaTokenPlanUsageError.parseFailed("Invalid JSON response")) {            try AlibabaTokenPlanUsageFetcher.parseUsageSnapshot(from: Data("not-json".utf8))        }    }     @Test    func `SEC token preflight falls back to user info`() async throws {        defer {            AlibabaTokenPlanStubURLProtocol.handler = nil        }         AlibabaTokenPlanStubURLProtocol.handler = { request in            guard let url = request.url else { throw URLError(.badURL) }             if url.host == "alibaba-token-plan.test",               url.path == "/cn-beijing",               request.httpMethod == "GET"            {                #expect(url.port == 9443)                return Self.makeResponse(url: url, body: "<html></html>", statusCode: 200)            }             if url.host == "alibaba-token-plan.test",               url.path == "/tool/user/info.json",               request.httpMethod == "GET"            {                #expect(url.port == 9443)                #expect(request.value(forHTTPHeaderField: "Cookie") == "login_aliyunid_ticket=ticket; raw_only=keep")                #expect(request.value(forHTTPHeaderField: "Accept") == "application/json, text/plain, */*")                let json = """                {                  "code": "200",                  "data": {                    "secToken": "user-info-token"                  },                  "successResponse": true                }                """                return Self.makeResponse(url: url, body: json, statusCode: 200)            }             if url.host == "alibaba-token-plan.test", request.httpMethod == "POST" {                #expect(request.value(forHTTPHeaderField: "Cookie") == "login_aliyunid_ticket=ticket; raw_only=keep")                #expect(request.value(forHTTPHeaderField: "Origin") == "https://bailian.console.aliyun.com")                #expect(request.value(forHTTPHeaderField: "Referer") == AlibabaTokenPlanUsageFetcher.dashboardURL                    .absoluteString)                let body = Self.requestBodyString(from: request)                #expect(body.contains("sec_token=user-info-token"))                #expect(body.contains("GetSubscriptionSummary"))                #expect(body.contains("BssOpenAPI-V3"))                #expect(body.contains("ProductCode"))                #expect(body.contains("sfm_tokenplanteams_dp_cn"))                let json = """                {                  "Success": true,                  "Data": {                    "TotalCount": 1,                    "TotalValue": 1000,                    "TotalSurplusValue": 900                  }                }                """                return Self.makeResponse(url: url, body: json, statusCode: 200)            }             throw URLError(.unsupportedURL)        }         let configuration = URLSessionConfiguration.ephemeral        configuration.protocolClasses = [AlibabaTokenPlanStubURLProtocol.self]        let session = URLSession(configuration: configuration)        let snapshot = try await AlibabaTokenPlanUsageFetcher.fetchUsage(            apiCookieHeader: "login_aliyunid_ticket=ticket; raw_only=keep",            dashboardCookieHeader: "login_aliyunid_ticket=ticket; raw_only=keep",            environment: [AlibabaTokenPlanSettingsReader.hostKey: "https://alibaba-token-plan.test:9443"],            session: session)         #expect(snapshot.planName == "TOKEN PLAN")    }     @Test    func `SEC token preflight uses injected session`() async throws {        AlibabaTokenPlanStubURLProtocol.handler = { request in            guard let url = request.url else { throw URLError(.badURL) }             if url.host == "session-token.test", request.httpMethod == "GET" {                return Self.makeResponse(                    url: url,                    body: "<html><script>sec_token = \"session-html-token\";</script></html>",                    statusCode: 200)            }             if url.host == "session-token.test", request.httpMethod == "POST" {                let body = Self.requestBodyString(from: request)                #expect(body.contains("sec_token=session-html-token"))                let json = """                {                  "Success": true,                  "Data": {                    "TotalCount": 1,                    "TotalValue": 1000,                    "TotalSurplusValue": 900                  }                }                """                return Self.makeResponse(url: url, body: json, statusCode: 200)            }             throw URLError(.unsupportedURL)        }        defer {            AlibabaTokenPlanStubURLProtocol.handler = nil        }         let configuration = URLSessionConfiguration.ephemeral        configuration.protocolClasses = [AlibabaTokenPlanStubURLProtocol.self]        let session = URLSession(configuration: configuration)        let snapshot = try await AlibabaTokenPlanUsageFetcher.fetchUsage(            apiCookieHeader: "login_aliyunid_ticket=ticket",            dashboardCookieHeader: "login_aliyunid_ticket=ticket",            environment: [AlibabaTokenPlanSettingsReader.hostKey: "https://session-token.test"],            session: session)         #expect(snapshot.planName == "TOKEN PLAN")    }     @Test    func `redirect preserves cookie only for same host HTTPS requests`() throws {        let sourceURL = try #require(URL(string: "https://bailian.console.aliyun.com/data/api.json"))        let sameHostURL = try #require(URL(string: "https://bailian.console.aliyun.com/redirected"))        let crossHostURL = try #require(URL(string: "https://signin.aliyun.com/login"))        let insecureURL = try #require(URL(string: "http://bailian.console.aliyun.com/redirected"))        let response = try #require(HTTPURLResponse(            url: sourceURL,            statusCode: 302,            httpVersion: "HTTP/1.1",            headerFields: nil))         var sameHostRequest = URLRequest(url: sameHostURL)        sameHostRequest.setValue("old=value", forHTTPHeaderField: "Cookie")        let sameHostRedirect = try #require(AlibabaTokenPlanUsageFetcher.redirectedRequest(            response: response,            request: sameHostRequest,            cookieHeader: "login_aliyunid_ticket=ticket"))        #expect(sameHostRedirect.value(forHTTPHeaderField: "Cookie") == "login_aliyunid_ticket=ticket")         var crossHostRequest = URLRequest(url: crossHostURL)        crossHostRequest.setValue("old=value", forHTTPHeaderField: "Cookie")        let crossHostRedirect = try #require(AlibabaTokenPlanUsageFetcher.redirectedRequest(            response: response,            request: crossHostRequest,            cookieHeader: "login_aliyunid_ticket=ticket"))        #expect(crossHostRedirect.value(forHTTPHeaderField: "Cookie") == nil)         let insecureRedirect = AlibabaTokenPlanUsageFetcher.redirectedRequest(            response: response,            request: URLRequest(url: insecureURL),            cookieHeader: "login_aliyunid_ticket=ticket")        #expect(insecureRedirect == nil)    }     @Test    func `dashboard redirect preserves dashboard cookie header`() throws {

Lines 1–500 of 774.