|
| 1 | +/* |
| 2 | + * Copyright 2016 Netflix, Inc. |
| 3 | + * |
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | + * you may not use this file except in compliance with the License. |
| 6 | + * You may obtain a copy of the License at |
| 7 | + * |
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | + * |
| 10 | + * Unless required by applicable law or agreed to in writing, software |
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | + * See the License for the specific language governing permissions and |
| 14 | + * limitations under the License. |
| 15 | + * |
| 16 | + */ |
| 17 | +package com.netflix.metacat |
| 18 | + |
| 19 | +import com.netflix.metacat.common.server.model.Lookup |
| 20 | +import com.netflix.metacat.common.server.properties.DefaultConfigImpl |
| 21 | +import com.netflix.metacat.common.server.properties.MetacatProperties |
| 22 | +import com.netflix.metacat.metadata.mysql.MySqlLookupService |
| 23 | +import org.springframework.jdbc.core.JdbcTemplate |
| 24 | +import org.springframework.jdbc.datasource.DriverManagerDataSource |
| 25 | +import spock.lang.Shared |
| 26 | +import spock.lang.Specification |
| 27 | + |
| 28 | +class MySqlLookupServiceSpec extends Specification{ |
| 29 | + private MySqlLookupService mySqlLookupService; |
| 30 | + private JdbcTemplate jdbcTemplate; |
| 31 | + |
| 32 | + @Shared |
| 33 | + MySqlLookupService mySqlLookupService |
| 34 | + |
| 35 | + @Shared |
| 36 | + JdbcTemplate jdbcTemplate |
| 37 | + |
| 38 | + def setupSpec() { |
| 39 | + String jdbcUrl = "jdbc:mysql://localhost:3306/metacat" |
| 40 | + String username = "metacat_user" |
| 41 | + String password = "metacat_user_password" |
| 42 | + |
| 43 | + DriverManagerDataSource dataSource = new DriverManagerDataSource() |
| 44 | + dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver") |
| 45 | + dataSource.setUrl(jdbcUrl) |
| 46 | + dataSource.setUsername(username) |
| 47 | + dataSource.setPassword(password) |
| 48 | + |
| 49 | + jdbcTemplate = new JdbcTemplate(dataSource) |
| 50 | + mySqlLookupService = new MySqlLookupService(new DefaultConfigImpl(new MetacatProperties()), jdbcTemplate) |
| 51 | + } |
| 52 | + |
| 53 | + boolean areLookupsEqual(Lookup l1, Lookup l2) { |
| 54 | + l1.id == l2.id && |
| 55 | + l1.name == l2.name && |
| 56 | + l1.type == l2.type && |
| 57 | + l1.values == l2.values && |
| 58 | + l1.createdBy == l2.createdBy && |
| 59 | + l1.lastUpdatedBy == l2.lastUpdatedBy |
| 60 | + } |
| 61 | + |
| 62 | + def "test setValues with getValue/getValues iterative"() { |
| 63 | + setup: |
| 64 | + def values = valuesList as Set<String> |
| 65 | + def lookup = mySqlLookupService.setValues("mock", values) |
| 66 | + |
| 67 | + expect: |
| 68 | + lookup.values.size() == expectedSize |
| 69 | + lookup.values == mySqlLookupService.getValues("mock") |
| 70 | + lookup.values == mySqlLookupService.getValues(lookup.id) |
| 71 | + lookup.values.contains(mySqlLookupService.getValue("mock")) |
| 72 | + areLookupsEqual(lookup, mySqlLookupService.get("mock", true)) |
| 73 | + |
| 74 | + where: |
| 75 | + valuesList | expectedSize |
| 76 | + ["1", "2", "3"] | 3 |
| 77 | + ["1", "2", "3", "4"] | 4 |
| 78 | + ["1", "2", "3", "3", "4"] | 4 |
| 79 | + ["3", "4"] | 2 |
| 80 | + ["6"] | 1 |
| 81 | + ["1", "6"] | 2 |
| 82 | + } |
| 83 | + |
| 84 | + def "test setValues for different id"(){ |
| 85 | + when: |
| 86 | + def mock1LookUp = mySqlLookupService.setValues("mock1", ["1", "2", "3"] as Set<String>) |
| 87 | + def mock2LookUp = mySqlLookupService.setValues("mock2", ["4", "5", "6"] as Set<String>) |
| 88 | + then: |
| 89 | + mock1LookUp.values == ["1", "2", "3"] as Set<String> |
| 90 | + mock1LookUp.values == mySqlLookupService.getValues("mock1") |
| 91 | + areLookupsEqual(mock1LookUp, mySqlLookupService.get("mock1", true)) |
| 92 | + mock2LookUp.values == ["4", "5", "6"] as Set<String> |
| 93 | + mock2LookUp.values == mySqlLookupService.getValues("mock2") |
| 94 | + areLookupsEqual(mock2LookUp, mySqlLookupService.get("mock2", true)) |
| 95 | + } |
| 96 | + |
| 97 | + def "test addValues iterative"() { |
| 98 | + setup: |
| 99 | + def values = valuesList as Set<String> |
| 100 | + def lookup = mySqlLookupService.addValues("mockAdd", values, includeValues) |
| 101 | + |
| 102 | + expect: |
| 103 | + if (includeValues) { |
| 104 | + lookup.values == mySqlLookupService.getValues(lookup.id) |
| 105 | + lookup.values.contains(mySqlLookupService.getValue("mockAdd")) |
| 106 | + lookup.values == mySqlLookupService.getValues("mockAdd") |
| 107 | + } |
| 108 | + lookup.values.size() == expectedSize |
| 109 | + areLookupsEqual(lookup, mySqlLookupService.get("mockAdd", includeValues)) |
| 110 | + where: |
| 111 | + valuesList | expectedSize | includeValues |
| 112 | + ["1", "2", "3"] | 3 | true |
| 113 | + ["1", "2", "3", "4"] | 4 | true |
| 114 | + ["1", "2", "3", "3", "4"] | 4 | true |
| 115 | + ["3", "4"] | 4 | true |
| 116 | + ["6"] | 5 | true |
| 117 | + ["1", "6"] | 5 | true |
| 118 | + ["1", "2", "3"] | 0 | false |
| 119 | + ["1", "2", "3", "4"] | 0 | false |
| 120 | + ["1", "2", "3", "3", "4"] | 0 | false |
| 121 | + ["3", "4"] | 0 | false |
| 122 | + ["6"] | 0 | false |
| 123 | + ["1", "6"] | 0 | false |
| 124 | + } |
| 125 | + |
| 126 | + def "test addValues for different id"() { |
| 127 | + setup: |
| 128 | + def mock1LookUp = mySqlLookupService.addValues("addValues_mock1", ["1", "2", "3"] as Set<String>, false) |
| 129 | + def mock2LookUp = mySqlLookupService.addValues("addValues_mock2", ["4", "5", "6"] as Set<String>, true) |
| 130 | + |
| 131 | + expect: |
| 132 | + mock1LookUp.values.isEmpty() |
| 133 | + areLookupsEqual(mock1LookUp, mySqlLookupService.get("addValues_mock1", false)) |
| 134 | + mock2LookUp.values == ["4", "5", "6"] as Set<String> |
| 135 | + mock2LookUp.values == mySqlLookupService.getValues("addValues_mock2") |
| 136 | + areLookupsEqual(mock2LookUp, mySqlLookupService.get("addValues_mock2", true)) |
| 137 | + } |
| 138 | + |
| 139 | + def "test setValue for different id"(){ |
| 140 | + when: |
| 141 | + def mock1LookUp = mySqlLookupService.setValues("mock1", ["1", "2", "3"] as Set<String>) |
| 142 | + def mock2LookUp = mySqlLookupService.setValues("mock2", ["4", "5", "6"] as Set<String>) |
| 143 | + then: |
| 144 | + mock1LookUp.values == ["1", "2", "3"] as Set<String> |
| 145 | + mock1LookUp.values == mySqlLookupService.getValues("mock1") |
| 146 | + areLookupsEqual(mock1LookUp, mySqlLookupService.get("mock1", true)) |
| 147 | + mock2LookUp.values == ["4", "5", "6"] as Set<String> |
| 148 | + mock2LookUp.values == mySqlLookupService.getValues("mock2") |
| 149 | + areLookupsEqual(mock2LookUp, mySqlLookupService.get("mock2", true)) |
| 150 | + } |
| 151 | +} |
| 152 | + |
0 commit comments