github.com/sacloud/iaas-api-go@v1.12.0/fake/ops_sim.go (about) 1 // Copyright 2022-2023 The sacloud/iaas-api-go Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package fake 16 17 import ( 18 "context" 19 "errors" 20 "strings" 21 "time" 22 23 "github.com/sacloud/iaas-api-go" 24 "github.com/sacloud/iaas-api-go/types" 25 ) 26 27 // Find is fake implementation 28 func (o *SIMOp) Find(ctx context.Context, conditions *iaas.FindCondition) (*iaas.SIMFindResult, error) { 29 results, _ := find(o.key, iaas.APIDefaultZone, conditions) 30 var values []*iaas.SIM 31 for _, res := range results { 32 dest := &iaas.SIM{} 33 copySameNameField(res, dest) 34 values = append(values, dest) 35 } 36 return &iaas.SIMFindResult{ 37 Total: len(results), 38 Count: len(results), 39 From: 0, 40 SIMs: values, 41 }, nil 42 } 43 44 // Create is fake implementation 45 func (o *SIMOp) Create(ctx context.Context, param *iaas.SIMCreateRequest) (*iaas.SIM, error) { 46 result := &iaas.SIM{} 47 copySameNameField(param, result) 48 fill(result, fillID, fillCreatedAt, fillModifiedAt) 49 50 result.Class = "sim" 51 result.Availability = types.Availabilities.Available 52 result.Info = &iaas.SIMInfo{ 53 ICCID: param.ICCID, 54 RegisteredDate: time.Now(), 55 Registered: true, 56 ResourceID: result.ID.String(), 57 } 58 59 putSIM(iaas.APIDefaultZone, result) 60 return result, nil 61 } 62 63 // Read is fake implementation 64 func (o *SIMOp) Read(ctx context.Context, id types.ID) (*iaas.SIM, error) { 65 value := getSIMByID(iaas.APIDefaultZone, id) 66 if value == nil { 67 return nil, newErrorNotFound(o.key, id) 68 } 69 dest := &iaas.SIM{} 70 copySameNameField(value, dest) 71 return dest, nil 72 } 73 74 // Update is fake implementation 75 func (o *SIMOp) Update(ctx context.Context, id types.ID, param *iaas.SIMUpdateRequest) (*iaas.SIM, error) { 76 value, err := o.Read(ctx, id) 77 if err != nil { 78 return nil, err 79 } 80 copySameNameField(param, value) 81 fill(value, fillModifiedAt) 82 putSIM(iaas.APIDefaultZone, value) 83 return value, nil 84 } 85 86 // Delete is fake implementation 87 func (o *SIMOp) Delete(ctx context.Context, id types.ID) error { 88 _, err := o.Read(ctx, id) 89 if err != nil { 90 return err 91 } 92 93 ds().Delete(o.key, iaas.APIDefaultZone, id) 94 return nil 95 } 96 97 // Activate is fake implementation 98 func (o *SIMOp) Activate(ctx context.Context, id types.ID) error { 99 value, err := o.Read(ctx, id) 100 if err != nil { 101 return err 102 } 103 if value.Info.Activated { 104 return errors.New("SIM[%d] is already activated") 105 } 106 value.Info.Activated = true 107 value.Info.ActivatedDate = time.Now() 108 value.Info.DeactivatedDate = time.Time{} 109 putSIM(iaas.APIDefaultZone, value) 110 return nil 111 } 112 113 // Deactivate is fake implementation 114 func (o *SIMOp) Deactivate(ctx context.Context, id types.ID) error { 115 value, err := o.Read(ctx, id) 116 if err != nil { 117 return err 118 } 119 if !value.Info.Activated { 120 return errors.New("SIM[%d] is already deactivated") 121 } 122 value.Info.Activated = false 123 value.Info.ActivatedDate = time.Time{} 124 value.Info.DeactivatedDate = time.Now() 125 putSIM(iaas.APIDefaultZone, value) 126 return nil 127 } 128 129 // AssignIP is fake implementation 130 func (o *SIMOp) AssignIP(ctx context.Context, id types.ID, param *iaas.SIMAssignIPRequest) error { 131 value, err := o.Read(ctx, id) 132 if err != nil { 133 return err 134 } 135 if value.Info.IP != "" { 136 return errors.New("SIM[%d] already has IPAddress") 137 } 138 value.Info.IP = param.IP 139 putSIM(iaas.APIDefaultZone, value) 140 141 return nil 142 } 143 144 // ClearIP is fake implementation 145 func (o *SIMOp) ClearIP(ctx context.Context, id types.ID) error { 146 value, err := o.Read(ctx, id) 147 if err != nil { 148 return err 149 } 150 if value.Info.IP == "" { 151 return errors.New("SIM[%d] doesn't have IPAddress") 152 } 153 value.Info.IP = "" 154 putSIM(iaas.APIDefaultZone, value) 155 return nil 156 } 157 158 // IMEILock is fake implementation 159 func (o *SIMOp) IMEILock(ctx context.Context, id types.ID, param *iaas.SIMIMEILockRequest) error { 160 value, err := o.Read(ctx, id) 161 if err != nil { 162 return err 163 } 164 if value.Info.IMEILock { 165 return errors.New("SIM[%d] is already locked with IMEI") 166 } 167 value.Info.IMEILock = true 168 value.Info.IMEI = param.IMEI 169 putSIM(iaas.APIDefaultZone, value) 170 return nil 171 } 172 173 // IMEIUnlock is fake implementation 174 func (o *SIMOp) IMEIUnlock(ctx context.Context, id types.ID) error { 175 value, err := o.Read(ctx, id) 176 if err != nil { 177 return err 178 } 179 if !value.Info.IMEILock { 180 return errors.New("SIM[%d] is not locked with IMEI") 181 } 182 value.Info.IMEILock = false 183 value.Info.IMEI = "" 184 putSIM(iaas.APIDefaultZone, value) 185 return nil 186 } 187 188 // Logs is fake implementation 189 func (o *SIMOp) Logs(ctx context.Context, id types.ID) (*iaas.SIMLogsResult, error) { 190 value, err := o.Read(ctx, id) 191 if err != nil { 192 return nil, err 193 } 194 195 return &iaas.SIMLogsResult{ 196 Total: 1, 197 From: 0, 198 Count: 1, 199 Logs: []*iaas.SIMLog{ 200 { 201 Date: time.Now(), 202 SessionStatus: "up", 203 ResourceID: value.ID.String(), 204 IMEI: value.Info.ConnectedIMEI, 205 IMSI: strings.Join(value.Info.IMSI, " "), 206 }, 207 }, 208 }, nil 209 } 210 211 // GetNetworkOperator is fake implementation 212 func (o *SIMOp) GetNetworkOperator(ctx context.Context, id types.ID) ([]*iaas.SIMNetworkOperatorConfig, error) { 213 _, err := o.Read(ctx, id) 214 if err != nil { 215 return nil, err 216 } 217 v := ds().Get(o.key+"NetworkOperator", iaas.APIDefaultZone, id) 218 if v != nil { 219 var res []*iaas.SIMNetworkOperatorConfig 220 configs := v.(*[]*iaas.SIMNetworkOperatorConfig) 221 res = append(res, *configs...) 222 return res, nil 223 } 224 225 return []*iaas.SIMNetworkOperatorConfig{}, nil 226 } 227 228 // SetNetworkOperator is fake implementation 229 func (o *SIMOp) SetNetworkOperator(ctx context.Context, id types.ID, configs []*iaas.SIMNetworkOperatorConfig) error { 230 _, err := o.Read(ctx, id) 231 if err != nil { 232 return err 233 } 234 235 ds().Put(o.key+"NetworkOperator", iaas.APIDefaultZone, id, &configs) 236 return nil 237 } 238 239 // MonitorSIM is fake implementation 240 func (o *SIMOp) MonitorSIM(ctx context.Context, id types.ID, condition *iaas.MonitorCondition) (*iaas.LinkActivity, error) { 241 _, err := o.Read(ctx, id) 242 if err != nil { 243 return nil, err 244 } 245 now := time.Now().Truncate(time.Second) 246 m := now.Minute() % 5 247 if m != 0 { 248 now.Add(time.Duration(m) * time.Minute) 249 } 250 251 res := &iaas.LinkActivity{} 252 for i := 0; i < 5; i++ { 253 res.Values = append(res.Values, &iaas.MonitorLinkValue{ 254 Time: now.Add(time.Duration(i*-5) * time.Minute), 255 UplinkBPS: float64(random(1000)), 256 DownlinkBPS: float64(random(1000)), 257 }) 258 } 259 260 return res, nil 261 } 262 263 // Status is fake implementation 264 func (o *SIMOp) Status(ctx context.Context, id types.ID) (*iaas.SIMInfo, error) { 265 v, err := o.Read(ctx, id) 266 if err != nil { 267 return nil, err 268 } 269 return v.Info, nil 270 }